/** * 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); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

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

Куропаты: долгий путь к истине


«Сократ мне друг, но истина дороже»
Крылатая фраза с античных времён

Тридцать лет назад в газете «Літаратура і мастацтва» от 3 июня 1988 года была напечатана статья «Курапаты — дарога сьмерці», авторами которой стали сотрудник Института истории АН БССР Зенон Позняк и инженер-конструктор завода им. Ленина Евгений Шмыгалёв.

Общество содрогнулось от сенсации, превзошедшей по резонансу сообщение немецких пропагандистских служб о найденном в 1943 году захоронении польских офицеров в Катыни.

Если Геббельс приписывал советам ликвидацию 20 тысяч польских военных, то количество жертв сталинских репрессий, якобы преданных земле в урочище Куропаты, постоянно росло, и вскоре, благодаря фантазиям Позняка, стало исчисляться цифрами, на порядок большими — 200—250 тысяч человек.

Раскопки в Куропатах вряд ли были плановыми для археологов Института истории, да и названия у той местности до публикации не было.

Скорее всего, Позняк получил откуда-то наводку и воспользовался тем, что в апреле-мае 1988 года вдоль кольцевой дороги проводили земляные работы газовики.

По воле судьбы у меня имелось представление о стиле работы органов госбезопасности сталинского периода.

Мои родные были живыми свидетелями действий НКВД в 1937—1941 годах в Западной Белоруссии, а бабушка едва не попала под депортацию. Дед мой по материнской линии был арестован осенью 1945 года и через полгода скончался в Вилейской тюрьме.

Мать рассказывала мне об обстоятельствах его ареста, этапировании и содержании заключённых, о тех испытаниях, которые выпали на долю родни.

После войны к нашему дому время от времени ночью подъезжал «воронок» и на пороге навеселе появлялся капитан МГБ Молодцов.

За накрытым столом он усаживал меня, маленького, на колени и просил спеть ему «Только море да небо вокруг…».

Однажды в обмен на понравившиеся мне золотые погоны он предложил затянуться папиросой «Казбек», после чего меня еле откачали и я после этого ни разу не затянулся сигаретным дымом.

Как потом стало известно, Молодцова в конце 1953 года расстреляли.

Эти и другие обстоятельства не давали мне повода восторженно относиться ко всему тому, что происходило в период репрессий, однако ни я, ни мои родные не опустились до того, чтобы охаивать весь советский период, представляя его только в чёрных красках.

Позднее мне приходилось много контактировать с бывшими сотрудниками органов госбезопасности. Двое из них достаточно высокого уровня были роднёй моей жены, и их поведению можно было поучиться.

К тому же в машеровские времена кадры воспитывали бережно относиться к достоинству людей. Если возникали к ним вопросы, мы въедались в проблему, каждый эпизод подтверждали фактами и, делая выводы, не брали на веру всё, что говорят или пишут.

Работая в самые смутные перестроечные времена в Президиуме АН БССР, я неплохо знал гнездовье оппозиции. Мне не раз приходилось беседовать с «неформалами», рассматривать их прошения о предоставлении помещений для проведения разного рода мероприятий и даже участвовать в дискуссиях в аспирантском общежитии.

Напротив моей приёмной находился кабинет Алеся Адамовича, автора знаменитого высказывания: «БССР — Вандея перестройки».

Мы частенько беседовали с ним, и я даже уговорил президента АН БССР Н.А.Борисевича спустить на тормозах поручение ЦК переместить рабочее место Адамовича из Президиума в профильный институт.

В то время звезда Позняка только восходила.

За что он, искусствовед, был уволен из Института этнографии и фольклора и занялся в Институте истории археологией, обсуждать не имеет смысла. Видимо, другого применения ему не нашлось.

Заметим при этом, что факты участия некоторых непрофильных академических учёных-естественников в археологических раскопках не были новинкой.

Особенно серьёзным специалистом в этой области считался крупный деятель БНФ, доктор физико-математических наук Юрий Ходыко, работавший в Институте физики и всё своё отпускное время посвящавший изучению исторических мест Беларуси.

Но этот исключительно порядочный человек к раскопкам в Куропатах приобщён почему-то не был, а может, и сам не захотел.

Для того чтобы разобраться в ситуации вокруг Куропат, надо понимать, в какое положение в перестроечное время были поставлены силовики, поскольку следственные, экспертные и другие действия без них проводиться не могут.

Хотя белорусская милиция менее других зависела от Москвы, она с конца 80-х была связана по рукам местными перестроечными властями и не могла применить весь арсенал своих возможностей, так как в её деятельность вмешивались все кому не лень. И с самого верху, и снизу.

Комитет госбезопасности, наиболее тесно связанный с Москвой, занял на тот момент, в общем-то, правильную позицию самосохранения и старался обходить острые углы, особенно после назначения в августе 1991 года председателем КГБ СССР инициатора приобретения резиновых дубинок для милиции Вадима Бакатина.

Это о нём известный диссидент Владимир Буковский после состоявшейся встречи в сентябре 1991 года писал: «…возглавляемое им ведомство он терпеть не может».

В итоге КГБ СССР был развален — и только в Беларуси он выжил.

В отличие от Лубянки, ухоженный памятник Ф.Дзержинскому стоит до сих пор в скверике напротив здания Комитета. Сохранилась и другая атрибутика, свидетельствуя о преемственности чекистских традиций на родине «железного Феликса».

Исключительно правильным в то смутное время было сохранение закрытости доступа к архивам госбезопасности. Да и печатного органа для массового читателя у КГБ не было.

О прокуратуре того времени говорить не приходится, поскольку её руководство испытывало мандраж и шло на поводу у националистических сил, не создавая препятствий в их деятельности, хотя поводов было предостаточно.

Именно по этой причине следственные действия по проблеме Куропат закончились выводами, очень удобными для Позняка и его окружения.

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

Именно в этой газете и появились статьи, ставящие под сомнение выводы прокуратуры.

1

После выступлений в печати прокуратура провела ещё несколько расследований, но строгих доказательств того, кто же захоронен в Куропатах, общественность так и не увидела. Лишь количество жертв уменьшилось — сначала до 30 тысяч, а затем и того меньше.

Прошло достаточно лет.

Позняк удрал за границу. Существенно поредевшие процессии в Куропаты на «Дзяды» стали восприниматься обществом как дань традиции.

Но вдруг не так давно каким-то недалёким деятелям захотелось построить развлекательный центр в том районе, и тема Куропат получила второе дыхание.

Трудно себе представить, что творилось в головах чиновников, подписавших разрешительные документы, вызвавшие бурю негодования.

В конце концов скандал удалось кое-как погасить отказом от намерений строить что-либо в том районе, но осадок остался, и тогда редактор «СБ сегодня» Павел Якубович решился сделать попытку найти соломоново решение.

На телевизионном заседании «Клуба редакторов», а затем на круглом столе по теме сталинских репрессий, он заявил:

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

Так он, видимо, собирался «избавить эту площадку от излишней политизированности, а общими силами государства и общественности собрать деньги на установку там мемориала».

Однако оказалось, что радикалы никогда не поддержат проект Якубовича, поскольку опасаются обезличивания популярной темы сталинских репрессий, что могло бы повлечь за собой сокращение зарубежного финансирования их деятельности.

В воздухе повисло ощущение, что из-за нерадивости чиновников возможен прокол, который может создать прецедент — ведь правда о Куропатах, несмотря на прокурорские утверждения середины 90-х о поставленной точке, пока так и осталась подвешенной в воздухе.

Будучи в прошлом году на праздновании Дня Победы у своего приятеля в Логойском районе, мне довелось познакомиться с подполковником КГБ в отставке Емельяном Николаевичем Лепешко, который в тот период был активным членом Общественной комиссии по расследованию преступлений, совершённых на холме возле деревень Цна-Йодково — Зелёный Луг, который известен сегодня под названием Куропаты.

Когда беседа перетекла к главному конфузу перестройки, он отозвал меня в сторонку и сказал:

— Не верьте вы в эту галиматью. В Куропатах погребены местные и этапированные из Европы евреи, расстрелянные немцами в конце 1941-го — первой половине 1942 года.

Мы договорились как-нибудь встретиться и побеседовать, и недавно Емельян Николаевич навестил меня с увесистой папкой разных материалов.

Мы провели с ним беседу, которую я и воспроизвожу с некоторыми сокращениями.

2

Вопрос: — И всё же в чём мотивация этих его действий? Неужели он без опоры на влиятельные силы смог взбудоражить общественность на многие годы?

Ответ: — Всё очень просто. Проследите действия Позняка на всём протяжении его учёбы в институте и работы в Академии — и станет ясно, что он в случае чего сразу бежал жаловаться к авторитетным коммунистам или в ЦК.

Завершить учёбу и защитить диплом в институте ему помог выдающийся советский поэт и деятель КПЗБ Максим Танк.

Кандидатскую диссертацию по проблемам развития белорусского театра он защищал не в Минске, а в колыбели Октябрьской революции — Ленинграде.

Вновь трудоустроиться в Академии наук после увольнения из Института этнографии и фольклора ему помог не кто иной, как секретарь ЦК КПБ по идеологии Е.Т.Кузьмин.

Даже пишущую машинку для печатанья самиздата он приобрёл через друга в подведомственной КГБ организации.

Поэтому Позняк не так прост, как многим кажется. Ведь скандал вокруг Куропат «крышевал» не кто иной, как секретарь ЦК КПСС Александр Яковлев.

Он же предупредил белорусские власти о том, чтобы ни единый волосок не упал с головы Позняка даже тогда, когда ему хотели предъявить обвинение в пропаже артефактов, найденных при раскопках в Заславле.

Мотивы действий Позняка тоже понятны.

Если бы он сосредоточился на проблемах «занядбанасці» мовы и белорусской культуры, то его шансы прорваться во власть были бы нулевыми — если с мовой в городах действительно появились проблемы из-за урбанизации, то белорусская культура в советский период была на пике всесоюзной популярности.

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

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

Яковлеву же и другим предателям того времени нужен был яркий, сногсшибательный пример невиданной массовости репрессий в Белоруссии, так как других поводов взорвать общество не имелось.

БССР, несомненно, стояла костью в горле проходимцев, поскольку уровень жизни здесь был выше и общественный накал конца 80-х был в большей степени результатом агитации, а не провальной ситуации в экономике страны. Потому Яковлеву крайне необходимо было взорвать западный регион СССР, что и было достигнуто с помощью Чернобыля и Куропат.

Неслучайно, пребывая за рубежом, Позняк до сих пор упорно твердит о сотнях тысяч расстрелянных НКВД в Куропатах, а в последнее время договорился до того, что Беларусь потеряла в 30-х годах аж два миллиона человек, чего будучи в здравом уме представить себе невозможно.

Вопрос: — А какие аргументы вы можете привести в доказательство того, что НКВД непричастен к расстрелам в Куропатах?

Ответ: — Спецслужбы — организации закрытые. Они всегда ведут себя так, чтобы их деятельность была скрыта от постороннего уха и глаза.

Это было характерным как для НКВД, так и для МГБ и КГБ.

И тогда, и сейчас практические действия спецслужб тщательно документируются, и документам присваивают соответствующие грифы секретности.

Никто не пытается опровергать тот факт, что репрессии 30-х годов были масштабными, с вопиющими нарушениями законности.

Зачастую по доносам в эти жернова попадали невинные, оклеветанные люди, и их, несомненно, очень жаль.

Следует также понимать — чем дальше находились города и местечки Белоруссии от столицы, тем большей была вероятность самоуправства, злоупотреблений и сведения счётов.

В Минске до войны проживали немногим более 200 тысяч человек. Большая половина населения — евреи. Ещё больший процент их был в местечках.

Эти пропорции соответствовали и качественному составу сотрудников НКВД.

Треть территорий и населения до 1939 года находились в Польше, и советская власть пришла в «кресовые» регионы, когда волна репрессий существенно спала, чему всемерно способствовал сменивший Ежова Берия.

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

Сразу хочу заметить, что с началом войны архивы белорусского НКВД были эвакуированы, а после войны в полном составе были возвращены обратно.

Из архивных документов КГБ следует, что после 1938 года расстрелов по линии НКВД в Белоруссии вообще не проводилось — они приходятся на 1937—1938 годы.

Подсчитано и общее количество исполненных чекистами приговоров судов и «троек» — к высшей мере было приговорено около 25 тысяч человек.

Расстрелы и захоронения производились в Могилёве, Бобруйске, Черикове, Гомеле, Витебске и Орше. Около трёх тысяч человек захоронены в Мозыре и его окрестностях.

В Минской области было расстреляно около 13 тысяч человек, которые захоронены в Борисове, Слуцке, Червене и Вилейке.

Нетрудно подсчитать, что на сам Минск приходится около 7 тысяч смертных приговоров.

Насколько мне известно, в окрестностях столицы имелось 13 мест захоронения.

В направлении Логойска есть захоронение около деревни Боровая.

На него-то и могли ссылаться в ходе следствия несколько бывших сотрудников НКВД 1937—1941 годов, однако из-за приблизительности указанных координат их показания были использованы для подтверждения прокурорской версии.

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

В распоряжении НКВД имелось два автозака, в которых по ночам вывозили тела за город и тщательно захоранивали без каких-либо свидетелей.

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

Уму непостижимо, что в эту болотистую тогда глухомань по бездорожью можно было доставить 250 тысяч арестованных и расстреливать их из стрелкового оружия, разбрасывая гильзы и разнося эхо по всем окрестностям.

3

Вопрос: — Так почему же Позняк и его сподручные ссылались на живых свидетелей, которые «видели», «слышали» и «рассказали»?

Ответ: — Вы можете себе представить, что среди жителей близлежащих деревень находились желающие приблизиться к объекту НКВД и разглядывать, как тысячами убивают ни в чём не повинных людей? Я — нет.

Если бы они такое увидели, то немедленно снялись бы с насиженных мест и уехали куда подальше.

Хождения по той территории начались после того, как немцы оккупировали Минск и его окрестности, однако нет чётких свидетельств, что именно тогда кем-то были найдены чьи-то останки.

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

С другой стороны, мне не известно ни одного факта, когда следователями были приняты во внимание свидетельства тех, кто действительно был в курсе событий, включая ту же Марию Осипову.

Их фамилии были упомянуты в заключении Общественной комиссии и многочисленных статьях в прессе, однако к этим материалам не прислушались.

Вопрос: — Так кто же на самом деле нашёл вечный покой в Куропатах?

Ответ: — Вас интересует моё личное мнение или прокурорское?

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

Её можно понять, так как развала аргументации, на которой была построена вся пропагандистская деятельность могильщиков СССР, ни Шушкевич, ни кто-нибудь другой не допустил бы. Ведь пришлось бы отвечать не только перед введенным в заблуждение народом, но и перед обманутым президентом США Клинтоном, побывавшим в Куропатах и подарившим «памятную скамеечку».

Страна выглядела бы посмешищем после таких поворотов.

С другой стороны, достаточно посмотреть на тех академических учёных, которым поручалось доизучить проблему.

Среди них главным подписантом является Олег Иов, чья фамилия до сих пор фигурирует в числе авторов публикации «Куропаты» в интернет-библиотеке «Komunikat», соседствуя с Позняком, Шмыгалёвым, Кривальцевичем.

Ответ на вопрос, кто был захоронен в Куропатах, кроется в происхождении этого названия.

Копатели вешают лапшу, будто название Куропаты произошло от каких-то белых цветочков, за которыми ходили местные жители в весеннюю пору.

На самом деле его происхождение немецкое.

5

Вот что писал в газете «Во славу Родины» 23 июня 1994 года бывший командир партизанского отряда бригады «Дяди Коли» Иван Загороднюк.

С сентября 1941 года по май 1942 года на перекрёстке Логойского тракта и дороги Боровая — Заславль, а также в том месте, где улица Цнянская переходила в полевую дорогу к деревням Подгорное и Цна-Йодково, можно было видеть стрелочные указатели военного типа с надписью на немецком языке «Курпате юден».

Этими указателями обозначалось направление доставки 7,5 тысячи переводчиков еврейской национальности, которые перед нападением на СССР были мобилизованы немцами в Австрии, Германии, Чехословакии и Польше для работы в Москве после её взятия.

Все они хорошо владели немецким и русским языками и двигались вслед за наступающими немецкими войсками.

В связи с возникшими у немцев проблемами под Смоленском все эти люди были брошены в Оршанскую тюрьму для уголовников, которых советы выпустили на все четыре стороны при отступлении. Некоторые из них даже организовали партизанский отряд с шуточным названием «Гоп со смыком».

Долго в тюрьме переводчики не просидели, так как с первым залпом «катюш» их погрузили в товарные поезда и направили в сторону Минска, подальше от фронта.

Вместе с ними отправили и несколько вагонов с советскими гражданами, которых немцы арестовали после взятия Орши.

Эти вагоны прибыли первыми, и арестантов под охраной литовского и латышского батальонов, вооружённых советским оружием, пешком провели через весь Минск в сторону расположения немецкого гарнизона «Зелёный Луг» и заставили на холмах, расположенных в 400 метрах от гарнизона, копать ямы, сооружать проволочные заграждения, строить насыпную стенку для улавливания пуль и другие объекты фортификации.

В первых числах сентября 1941 года стали прибывать колонны переводчиков, которых партиями подводили к ямам и расстреливали.

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

Акция коснулась тех евреев, которые исповедовали раввинский иудаизм. Евреев-мессиан немцы не расстреливали, а взяли к себе на службу переводчиками или отправили в Палестину, где Гитлер обещал после войны организовать еврейское государство.

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

Затем приступили к расстрелу узников минского гетто. Особенно массовым был расстрел 6—7 ноября 1941 года. Всё это продолжалось до весны 1942 года.

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

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

8

Кстати, в процессе раскопок были найдены следы антисептиков, но прокуратура об этом умолчала.

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

С середины лета 1942 года по совокупности ранее названных причин главное место экзекуции было перенесено в Тростенец, так как туда подходила железнодорожная ветка и жертвы доставлялись эшелонами.

Вопрос: — В материалах следствия наличие в захоронениях одежды иностранного производства объясняется расстрелом в Куропатах жителей Польши и Литвы. Как было на самом деле?

Ответ: — Всё это глупости. Как я уже говорил, после 1938 года НКВД не приводил в исполнение расстрельные приговоры, хотя депортацией польских семей с сентября 1939 года занимался.

Если кто-нибудь оказывал сопротивление или пытался бежать, то зачем его было доставлять в Минск? Конвойные войска НКВД имели полномочия принимать решения на месте.

К тому же чем можно объяснить наличие в захоронениях предметов немецкого или австрийского происхождения?

Интересен вопрос и о количестве найденных останков женских тел. Судя по всему, женщин в числе расстрелянных в Куропатах не менее 17 процентов. Это никак не увязывается с тем, что в отношении женщин в Минске имелось всего полдесятка приговоров к высшей мере, из которых достоверно приведен в исполнение только один.

Вопрос: — А какова судьба доставленных в Минск гамбургских евреев? Они тоже погибли в Куропатах?

Ответ: — Гамбургских евреев нельзя путать с переводчиками. Они в Минск прибыли после того, как последние были уничтожены.

Их ликвидировали главным образом в Тростенце, куда и было перенесено место экзекуций в связи с эксгумацией разлагавшихся тел в Куропатах.

Вопрос: — А что с патронами к револьверам «Наган» и пистолетам «ТТ»?

Ответ: — А как в тех же погребениях могли оказаться гильзы 1939 года выпуска, когда НКВД год как не приводил в исполнение расстрельные приговоры?

Ни для кого не секрет, что в начале войны немцы захватили немало складов с оружием. На местах сражений валялись оружие и боеприпасы советского производства. Ими и были вооружены немецкие прихвостни из прибалтийских республик и наши предатели.

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

У меня лично нет никаких сомнений, что немцы в Куропатах вели себя так же, как и в Хатыни — наиболее грязную работу за них наверняка выполняли литовские, латышские и наши изменники Родины.

8

М.И.Позняков: «А откуда я знаю, что это «Куропаты»? Так это место называл командир латышского легиона». («Вечерний Минск», 3 августа 1991 года.)

Вопрос: — Емельян Николаевич, неужели до 1988 года ни руководство страны, ни КГБ ничего не знали о захоронениях на холмах в районе Зелёного Луга?

Ответ
: — О немецких расстрелах знало всё взрослое население окрестных деревень. Знали об этом и в ЦК КПБ, но после войны на первом месте были другие вопросы — как сохранить жизнь и обеспечить всем необходимым тех, кто ещё в начале 50-х годов всё ещё ютился в землянках с малыми детьми.

Тот факт, что с началом перестройки никто в КГБ не обеспокоился ситуацией и проворонил раскопки Позняка, говорит в пользу непричастности чекистов к уничтожению людей в урочище, которое окрестили Куропатами.

В заключение замечу, что первым завёз в Куропаты памятный знак не Позняк, а первый секретарь ЦК КПБ Ефрем Евсеевич Соколов, только вот после этого он и пальцем не пошевелил, чтобы люди узнали правду.

После беседы с Емельяном Николаевичем мне почему-то вспомнилось, как на моей родине обстоят дела на еврейском кладбище, где на могиле более двух тысяч узников Долгиновского гетто установлен монумент.

В годы моей молодости на могилы предков кое-кто из евреев ещё приезжал. А теперь и довоенное, и послевоенное поколение состарилось, и на кладбище не появляется никто — в Долгиново евреев не осталось.

Местные школьники временами наводят порядок на мемориале, но само кладбище с весны зарастает травой, и только высоченные сосны вспоминают о тех, кто здесь нашёл вечный покой.

Забвение ощущать страшно. Но ещё страшнее видеть кресты там, где должны находиться погребальные плиты с надписями на родном языке убиенных.

Валентин Антипенко, источник

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