/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Добавить комментарий

Куропатская амнезия

По мере проведения очередных исследований территории Куропат, сторонникам позняковской версии каждый раз приходится «подгонять» результаты под существующую концепцию и придумывать для них все новые и новые объяснения.

Стратегическая высота

Осенью 2018 года в рамках реализации земляных и строительных работ на объекте «Создание и возведение памятного знака мемориала «Куропаты» и благоустройства прилегающей территории» сотрудниками Института истории НАН Беларуси были проведены археологические исследования в месте расположения памятного знака, а также археологическое наблюдение за благоустройством пешеходной дорожки. В ходе раскопок было обнаружено неожиданно большое количество разнообразных гильз и пуль. К сожалению, их краткий анализ, приведенный В. И. Кошманом, заведующим отделом археологии средних веков и Нового времени, кандидатом исторических наук, доцентом в статье «Урочище Куропаты (Брод) в свете археологических исследований», (журнал “Матэрыялы па археалогіі Беларусі” № 30, 2019) не даёт исчерпывающего ответа на ряд ключевых вопросов. В свою очередь, некоторые выводы, сделанные автором, заставляю усомниться в его компетентности.

Для начала анализа остановимся на винтовочных гильзах и пулях. В соответствии с проведёнными экспертизами установлено:

• В восточной части шурфа были обнаружены три пули от патрона 7,62 х 54.0 мм, которые принадлежат винтовке системе Мосина образца 1891 года.
• Гильза винтовочная 7,92 х 57,0 мм (Mauser) от немецкого винтовочно-пулемётного унитарного патрона с гильзой бутылочной формы с невыступающей закраиной. Коррозирована, клеймо не читается.
• Гильза винтовочная 7,92 х 57,0 мм (Mauser) от немецкого винтовочно-пулемётного унитарного патрона с гильзой бутылочной формы с невыступающей закраиной. Деформирована, клеймо «10 15 S64 S», что значит «10» - месяц производства «октябрь», «15» - год 1915, «S64» - материал, латунь, содержание 64 % меди.
• Гильза винтовочная 7,62 х 54.0 мм от патрона который принадлежит винтовке системе Мосина образца 1891, клеймо «7,62 КАЙНОКЪ 17», что показывает 7,62 калибр, 17 - год выпуска 1917, место выпуска Kynoch (Великобритания).

Ознакомимся с выводами, которые делает по этому поводу автор статьи: «Примечательны особенности распространения гильзового материала вдоль пешеходной дорожки. Так, винтовочные гильзы и пули начала ХХ века встречались на вершине холма и его «начальных» склонах. По нашему мнению, это свидетельствует о том, что именно здесь происходило какое-то локальное сражение в период советско-польской войны 1919-1920 гг. Отнесение данных событий к периоду Первой мировой войны, в частности событий 1915-1918 гг., связанных со сражением войск РИА и Германии не представляется возможным из-за отсутствия информации о вооруженных стычках в данном районе (консультация М. М. Смольянинова / отдел военной истории Института истории НАН Беларуси). В то же время имеется информация о различных боевых столкновениях на подступах к Минску в период советско-польской войны 1919-1920 гг. (июль-август 1919 г. при наступлении польских войск на Минск и июля 1920 года при наступлении войск Красной армии)».

Обратившись по указанным в конце абзаца ссылкам, находим необходимую информацию о боевых столкновениях на подступах к Минску в период советско-польской войны 1919-1920 гг.:

«Падцянуўшы новыя рэзервы, палякі 28 ліпеня прарвалі савецкую лінію абароны і захапілі Заслаўе, Сёмкаў Гарадок і іншыя населеныя пункты, якія знаходзіліся ў непасрэднай блізкасці да Мінска. Каля сцен сталіцы завязаліся жорсткія баі. Варожыя снарады рваліся ў самым горадзе. ... У ходзе баёў многія бліжэйшыя да Мінска вёскі - Пыльніца, Паперня і іншыя - неаднаразова пераходзілі з рук у рукі». (Мілаванаў, В. А. Польская інтэрвенцыя / В. А. Мілаванаў // Памяць: гісторыка-дакументальная хроніка Мінска : у 4 кн. - Мінск : БЕЛТА, 2002. - кн. 2 - С. 408)

Нягледзячы на прынятыя меры, польскія войскі, выкарыстаўшы перавагу ў сілах, 28.07.1919 г. прарвалі лінію абароны і пасля цяжкіх баёў у вёсках Галавачы, Пухлякі, Новы Двор захапілі Заслаўе, Сёмкаў Гарадок і іншыя населенныя пункты. 4.8.1919 г. вораг захапіў Ратамку, па некалькі разоў пераходзілі з рук у рукі населенныя пункты Якубовічы, Пыльніца, Паперня. (Курскі, М. І. На крутым павароце гісторыі / М. І. Курскі // Памяць: гісторыка-дакументальная хроніка Мінскага раёна / Беларус. Энцыкл. - Мінск: БелЭн, 1998. - С. 79)

Два автора в разных книгах, независимо друг от друга приводят фактически одни и те же данные. На что следует обратить внимание?

Первое и самое главное, так это то, что в перечне населённых пунктов нет упоминания ни о деревне Цна-Иодково, ни о Готище (старое название Зеленого Луга), ни о Дроздово, ни о Боровой. Это те деревни, которые находятся в непосредственной близости от Сергеевой горы (т. н. Куропат). Проще говоря, в обеих ссылках нет никаких упоминаний о происходивших в то время боях в окрестностях Куропат. Невольно возникает вопрос о корректности аргументации и выводов В. И. Кошмана, касательно происходившего на Куропатском холме «локального сражения в период советско-польской войны 1919-1920 гг». На основании каких документов он сделал такой вывод?

Населенные пункты Пыльница и Паперня расположены на Долгиновском тракте, по пути наступления польских воинских подразделений. На первый взгляд, только деревня Якубовичи выпадает из этого направления - она расположена почти в километре восточнее дороги. Расстояние от неё до Куропат на карте составляет немногим более четырех километров по прямой линии. Для современного читателя это приблизительно около трех-четырех минут езды на легковом автомобиле по кольцевой дороге. Но в начале ХХ столетия между деревней Якубовичи (Якубово) и Сергеевой горой (т.н. Куропатами) по непроходимым болотным топям протекала извилистая река Цна.

В связи с этим возникает ряд вопросов: Почему польские подразделения не продолжили своё наступление по Долгиновскому тракту в направлении Минска, а свернули на восток? Почему бои были в стороне, возле Якубович, а не возле Цнянки? Ответ можно найти на военной карте: красноармейцы после отступления основных частей уничтожили за собой мост на Долгиновском тракте возле деревни Цнянка, перекрыв полякам путь для наступления на Минск. Для отступления арьергарда был оставлен небольшой мостик за деревней Якубовичи. Поэтому не удивительно, что так отчаянно бойцы Красной армии сражались за эту деревню, а польское войско не могло её обойти стороной - вокруг было непроходимое болото. Удерживая деревню, красноармейцы перевели на другой берег все обозы с боеприпасами и раненными солдатами. А уничтожив этот мостик, остановили наступление польских подразделений.

Моделируя теоретическую возможность локального боя красноармейцев с поляками на склонах Куропатского холма, трудно представить, что могло поляков заставить отклониться от направления наступления на Минск и зайти в это место. Ведь с северной и западной стороны Куропаты окружали непроходимые болота, с южной и юго-восточной стороны была заболоченная низина с восточной стороны от самого склона холма начинался лес, который отделял его от Логойского тракта. Зайти сюда можно было с западной стороны через деревню Цна-Иодково, где был мост через реку и дорога через болото, предварительно хорошенько поплутав по проселочным дорогам. А ради чего? Ведь ни тактического, ни стратегического значения эта высота не представляла!

На этот вопрос В. И. Кошман по-военному четко и ясно ответил в своей статье: «Таким образом становится очевидным, что высокий и еще недостаточно заселенный холм урочища представлял собой СТРАТЕГИЧЕСКИ ВЫГОДНУЮ ПОЗИЦИЮ ДЛЯ КОНТРОЛЯ СУЩЕСТВУЮЩЕЙ ДОРОГИ КОЛОДИЩЕ-ЗАСЛАВЛЬ И ДРОЗДОВО». (С. 83)

Необходимо отметить, что нигде на старых топографических картах 20-х годов дороги Колодище-Заславль нет! На советской военной карте 1933 года, которую в своей статье для убедительности привел В. И. Кошман, она обозначена прерывистыми штрихами - её либо начинали строить, либо она была ещё в проекте. На польской военной карте 1933 года её вообще нет!

В книге Г. Тарнавского, В. Соболева, Е. Горелика «Куропаты: следствие продолжается» (М. 1990) приводятся показания Романа Николаевича Батяна:
— Я коренной житель деревни Цна... Сказать хочу следующее: ... Кольцевая дорога раньше называлась Боровой дорогой. Еще проходила здесь Погонная дорога, а Заславская строилась в 1936 году.

Что касается дороги на Дроздова, то во время советско-польской войны между т.н. Куропатами и этой дорогой рос старый лес, который был вырублен перед строительством Заславской трассы. О каком контроле и каких дорог могла идти речь во время советско-польской войны 1919-1920 гг.?
Комментарии, как говорится излишни...

Неизвестный бой

В 2011 году в ходе предварительного осмотра места перспективного строительства логистического склада СП ОАО «Спартак» археологами была обнаружена целая серия пуль от патронов в винтовке Мосина. Район обнаружения - северо-восточная часть поля, фактически напротив выезда с ТРЦ «Expobel». Пули были локализованы на небольшом возвышении и, возможно, данное место также являлось одним из пунктов обороны (?) при боестолкновении в период с 1919 по 1920 г. Расстояние от этого места до дороги Колодище-Заславль составляет около 180 - 200 м, до вершины куропатского холма - около 800 - 830 м.

Описание подъемного материала с поля:
• № 48-58 - пули винтовочные образца 1891 г., тупоконечные от патрона 7,62 х 54,0 мм, которые принадлежат винтовке системы Мосина;
• № 59 - пуля винтовочная образца 1908 г., остроконечная от патрона 7,62 х 54,0 мм, которая принадлежит винтовке системы Мосина;
• № 60 - сердцевина пули свинцовая, оболочка утрачена. (с. 85)
Ознакомимся с источником, на который ссылается В. И. Кошман, делая свой вывод о возможном боестолкновении в период с 1919 по 1920 г. на месте нахождения пуль от винтовки системы Мосина:

«На блізкіх подступах да Мінска палякі стварылі моцную абарончую лінію, яка праходзіла праз вёскі Малінаўка, Баравая, Азярышча, Вялікая Сунклева. Тут, на загадзя падрыхтаваных пазіцыях, якія былі агароджаны чатырма радамі калючага дроту, яны размясцілі буйныя сілы. Аднак 11.7.1920 г. савецкія воіны 17-й і 27-й стралковых дывізій пасля магутнай артпадрыхтоўкі прарвалі абарончую лінію ў двух месцах - каля вёсак Азярышча і Дражын. У ходзе праследвання адступаючага праціўніка часці Чырвонай арміі ў гэты ж дзень вызвалілі Мінск». (Мілаванаў, В. А. Польская інтэрвенцыя / В. А. Мілаванаў // Памяць: гісторыка-дакументальная хроніка Мінска : у 4 кн. - Мінск : БЕЛТА, 2002. - кн. 2 - С. 410)

В приведенной ссылке указывается о мощной польской оборонительной линии с опорным пунктом в деревни Боровой, но нет никакого упоминания о происходившем в этом месте сражении красноармейцев с поляками. Логично будет задаться вопросом: на основании чего В. И. Кошман сделал свой вывод о причастности поляков к этому бою и об отнесении его в период 1919-1920 года?

От деревни Боровая до места обнаружения пуль расстояние составляет около полутора километров. Для нападения на «мощную оборонительную линию» поляков нужны были соответствующие силы красноармейцев. Это должна быть досконально спланированная операция и достаточно многочисленный отряд хорошо подготовленных красноармейцев. Всё указывает на то, что противник находился на холме, и по нём вели прицельную стрельбу - шёл настоящий бой!
Ввиду того, что этот холм находился западнее укрепленной оборонительной линии, то нападение должно было происходить с западной стороны, т.е. с польского тыла. Совершить подобное мог только диверсионный отряд, засланный на оккупированную поляками территорию. О проведении подобного нападения на польские оборонительные позиции в Боровой в архиве, безусловно, должны были остаться отчетные документы, рапорта, донесения, воспоминания очевидцев. Почему В. И. Кошман не подкрепил свою голословную версию о бое с поляками в 1919-1920 годах и не привел в качестве доказательства своей версии никаких документов? Может потому, что этого боя в то время просто не было?

Заранее предвидя подобные вопросы об архивных документах и объяснении наличия пуль на холме среди поля в свой адрес, постараюсь на него дать исчерпывающий ответ в следующей части своего исследования.

Четыре дня подвига красноармейцев

Для прояснения ситуации с найденной археологами серией пуль от патронов к винтовке Мосина при раскопках, проведенных в 2011 году в ходе предварительного осмотра места перспективного строительства логистического склада СП ОАО «Спартак», обратимся к событиям, произошедшим в начале Великой Отечественной войны. Наиболее полно они отражены в Журнале боевых действий 2-го стрелкового корпуса о боевых действиях 100-й стрелковой дивизии за период с 25 по 28 июня 1941 года. В настоящее время указанные материалы размещены в широком доступе на различных сайтах в интернете. Нет смысла копировать весь дневник боевых действий, остановимся выборочно на некоторых ключевых моментах.

...100-я ордена Ленина стрелковая дивизия, дислоцировавшаяся в мирное время в гор. Минск, там же проводила отмобилизование. Явка приписного состава составила 70%, так как большинство его было на сборах и знало свою часть. Стрелковые полки, проводя отмобилизование, занимали круговую оборону Минска. Дивизией командовал генерал-майор Руссиянов.

... Вся артиллерия дивизии, до батальонной включительно, была изъята из подчинения командира дивизии и направлена в распоряжение командира 44-го стрелкового корпуса для отражения атаки танков противника, находясь западнее гор. Минск в 20—25 км. Фактически артиллерия дивизии, не участвуя в бою с 44-м стрелковым корпусом, в свою дивизию вернулась во второй половине 27.6.41 г.

Полки 100-й стрелковой дивизии занимали оборону: ...331-й стрелковый полк—фронтом на север на рубеже Жуков Луг, х. Кляпуха, пос. Готище, Цнянка, Зацень, имея все батальоны в одном эшелоне на широком фронте.

1
Схема. Положение частей 100-й стрелковой дивизии на 25 и 26 июня 1941 г.

Штаб и все спецподразделения дивизии — в районе зимних квартир в лесах восточное Уручье.

К 14 часам (26.06.1941) части корпуса изготовились к обороне на рубеже:

331-й стрелковый полк — подготовлял оборонительный рубеж по линии Карниз-Болото, свх. Первого Мая, Дроздова, Цна Иодково.

... В 17 часов противник, собрав свои части, повторил атаку, но с меньшими силами и настойчивостью. Атаки на всех направлениях были отбиты перед передним краем обороны. Потеряв значительное количество танков и особенно пехоты, противник после 18 часов атак больше не предпринимал. Наши части продолжали укреплять свои оборонительные позиции и вести разведку противника.

Потери 100-й и 161-й стрелковых дивизий, несмотря на полное отсутствие артиллерии, были незначительны...

Высадка авиадесанта в Острошицкий Городок продолжалась до наступления темноты группами в 3 самолета через 10—15 минут.

Утром 27.6.41 г. артиллерия, главным образом батальонная и полковая, начала занимать огневые позиции в районах обороны своих полков. Противник повел активные разведывательные действия, местами переходя в атаку, очевидно стремясь определить передний край и характер обороны. Некоторые полки в ночь с 26 на 27.6.41 г. передний край вынесли вперед и до рассвета окопались. Противотанковых препятствий ни в одной части не имелось. Местность для танков всюду была доступна...

331-й стрелковый полк, без 1-го стрелкового батальона, посланного на охрану штаба фронта, наступал вдоль дороги Малиновка, Боровцы, [отметка] 256,0, Марковщина, Вяча. Не получив полностью артиллерию, полк все же энергично атаковал противостоящего противника. ...
В связи с уходом 44-го стрелкового корпуса и штаба 13-й армии и охватом обоих флангов корпуса в 3.00 28.6.41 г. командир 2-го стрелкового корпуса принял решение на отвод частей корпуса за р. Волма...

100-я стрелковая дивизия главными силами в составе 85-го и 331-го стрелковых полков, 46-го гаубичного артиллерийского полка и 151-го корпусного артиллерийского полка отходила по дороге Лесковка, Колодищи, Глебковичи, Засница, Волма. 355-й стрелковый полк отходил по дороге Валерьяново, Сухоруки, высота 236,8, Волма. Отход всех частей прикрывался сильными арьергардами с использованием для отражения танковой атаки [противника] всей артиллерии, в том числе и корпусной...

Весь день 28.6.41 г. части корпуса вели упорные бои с наседающим противником, подвергаясь частым бомбардировкам и налетам самолетов противника с воздуха. К утру 29.6.41 г. части корпуса вышли и заняли новый оборонительный рубеж по р. Волма, взорвав переправы через реку...

Утром 29.6.41 г. бои за Минск были закончены.

Командиру 2-го стрелкового корпуса о боевых действиях 100-й ордена Ленина стрелковой дивизии за период с 26 по 28 июня 1941 г.

За время боев 100-й ордена Ленина стрелковой дивизией уничтожено:
в) 331-м стрелковым полком уничтожено до батальона 82-го пехотного полка, до двух рот мотоциклистов и до роты парашютистов, сожжено 8 танков, разбито артиллерийским огнем 44 танка, мотоциклов — 24, легковых машин — 2, бронемашин — 2, уничтожена батарея 75-мм пушек и 18 противотанковых орудий, убит командир 25-го танкового полка полковник Ротенбург (личный портфель с документами отправлен в штаб корпуса). Взято в плен 8 человек.
Всего за период боев дивизией уничтожено до полка пехоты, до 1,5 батальона мотоциклистов и уничтожено до 75 процентов материальной части 25-го танкового полка.
Командир 100-й ордена Ленина стрелковой дивизии [генерал-майор] РУССИЯНОВ
Начальник штаба дивизии [полковник] ГРУЗДЕВ
30 июня 1941 г.

Эти небольшие выдержки из документов дают общую картину боевых действиях, которые проходили в период с 25 по 28 июня 1941 года северо-восточнее Минска. Насколько найденные при раскопках пули соответствуют описанию боевых действий, мы проанализируем в следующей части исследования.

Александр ПЛАВИНСКИЙ

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.