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

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

Первый концлагерь в Минске открылся во времена БНР

В прошлом году мир отметил 100-летие со дня завершения Первой мировой войны. На белорусскую землю эта война пришла в 1915-м и на долгих три года разделила ее линией фронта. Западная часть современной Республики Беларусь была оккупирована Германией, а после 21 февраля 1918 г. оккупация распространилась почти на всю территорию нынешней страны (из крупных городов неоккупированным остался лишь Витебск). Оккупационный режим продлился почти год – только в ноябре-декабре 1918-го германские войска покинули Беларусь. Но за этот год они успели оставить по себе в стране недобрую память. В частности, Минск впервые узнал, что такое концентрационный лагерь…

Вопрос о том, когда именно в Минске были созданы первые концлагеря, стал темой работы историка Нины Стужинской, весьма активно выступающей в последнее время в качестве эксперта по вопросам новой и новейшей истории Беларуси. В своей статье «История первого концлагеря в центре Минска», опубликованной 24 декабря 2016 ода., она утверждала:
«В …2016 году свое 95-летие мог бы «отметить» Минский концентрационный лагерь. Об этом карательном учреждении стеснялись писать историки, поскольку слово «концлагерь» ассоциируется с ужасами гитлеровских лагерей. Однако не о событиях второй мировой войны пойдет речь. За 20 лет до ее начала в столице советской Беларуси заработало подобное учреждение, одно из «эффективных» изобретений ХХ века для «перевоспитания» граждан, организации принудительного труда и укрепления власти».

Т.е. из этого пассажа следует, что до гитлеровских концлагерей в Беларуси существовали только советские, что уже неверно: первые концлагеря в Беларуси были созданы немцами в 1915 г., а в 1919 г. в Брест-Литовской и Бобруйской крепостях существовали польские лагеря для советских военнопленных.

Далее Н. Стужинская рассказала о минском концлагере, действовавшем на территории бывшего бернардинского монастыря с 2 марта 1921 года: «В конце ноября 1920 г. на совещании представителей ЧК Беларуси, военных властей и реввоенсовета Западного фронта было решено начать концлагерное строительство в Минске. Для этого надо было срочно освободить здание монастыря и предоставить помещения исключительно лагерю. Лагерь начал функционировать 2 марта. Уже в мае там насчитывалось 125 человек. На 4 июля —155; 8 июля — 170, 21 августа — уже 356 человек. На 17 декабря 1921 года — 155 мужчин и 32 женщины, т.е. численность резко сократилась, так как осенью 1921 г. состоялся массовый вывоз осужденных в российские лагеря, первоначально в Новгородский».

Нет слов – это важная и трагическая страница в истории белорусской столицы. Но вот заголовок – «История первого концлагеря в центре Минска» — либо ошибочен (если Н. Стужинская знает истину), либо намеренно вводит читателя в заблуждение. Причем сразу по двум пунктам.

Во-первых, первый советский концлагерь в Минске появился отнюдь не в марте 1921 г., а на полгода раньше — 1 сентября 1920-го. Он подчинялся Минской губернской ЧК, а его комендантом был некто Либерман. Существовал этот лагерь недолго и при приближении польских войск был эвакуирован в г. Рославль, где функционировал до января 1921 г. Подробнее история этого лагеря изложена в статье А. Гавриленкова «Рославльский концентрационный лагерь принудительных работ (1920-21)», опубликованной в журнале «Край Смоленский» (2000, № 4-6).

А во-вторых, первый концентрационный лагерь в Минске был создан отнюдь не Советской властью, а германскими оккупантами. И произошло это в 1918 году. Точнее, лагерь был даже не один, а два. За данные об этом нужно быть благодарными научному сотруднику отдела геналогии, геральдики и нумизматики Института истории Национальной академии наук Республики Беларусь Юлии Латушковой, опубликовавшей во втором номере журнала «ARCHE» за 2017 г. материал «Мiнск у перыяд нямецкай акупацыi 1918 г. (21 лютага–10 снежня)». При написании статьи исследователь использовала большой корпус белорусской прессы 1918 г., в частности, газеты «Вольная Беларусь», «Беларускi шлях», «Бобруйский день», «Белорусские ведомости», «Минский голос», и материалы Национального исторического архива Республики Беларусь и Национального исторического музея Республики Беларусь.

Как следует из работы Ю. Латушковой, создание немцами концлагерей в Минске имело сугубо практическую цель: организовать быстрый и беспрепятственный сбор людей, пригодных для угона на принудительные работы в Германию. На такие работы, по мысли немцев, минчане должны были записываться добровольно, но к 4 апреля 1918 г. из нужных германцам 45 тысяч человек записалось только 2 тысячи. Поэтому оккупанты прибегли к простому и эффектному методу – поголовной облаве и заточению людей в концлагеря.
Из статьи Ю. Латушковой (в переводе с белорусского языка):

«С 8 апреля (1918 г. – Авт.) на улицах города появились многочисленные немецкие патрули. Целые кварталы были оцеплены. В квартирах проводились поголовные обыски. Задерживали мужчин, не делая разницы, состояли ли они когда-либо на военной службе или нет, являются коренными жителями Минска или живут в нем временно.
Арестованных содержали в нескольких лагерях, без возможности связаться с внешним миром. Родные и близкие ничего не знали об их судьбах. Документы, которые были на руках у задержанных, никто не рассматривал, вообще никакой регистрации не проводилось. Лагерь № 1 находился на углу улиц Широкой и Сторожевской, в артиллерийских казармах. Вокруг была натянута проволока, стояли пулеметы и часовые. Казармы не были подготовлены для жилья: пол залит жидкой грязью, окна выбиты, на нижнем этаже отсутствовали нары, не было отопления и освещения. В лагере находилось около 600 человек.

Лагерь № 2 находился на Александровском вокзале, за конторой товарной станции. В нем находилось около 3000 человек. Часть их была задержана на сборном пункте (плац во дворе каланчи), где переводчик в форме русского офицера объявил, что в случае опоздания на явку для регистрации все они будут отправлены в лагерь, а при минимальном сопротивлении по арестованным будет открыта стрельба. В лагере задержанные несколько часов вынуждены были стоять в колоннах, не имея возможности отойти даже по естественной надобности, после чего их пустили в общую толпу арестованных.

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

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

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

Эти данные основаны главным образом на докладе члена Минской городской думы Осмоловского от 14 апреля 1918 г. Текст этого документа был опубликован историком С. Крапивиным в «Белорусской военной газете» еще в 2013 г.:

«Во исполнение Вашего поручения от 10 го сего апреля за № 825 о принятии мер к освобождению задержанных немецкими патрулями жителей города и служащих городского самоуправления и с выяснением причин их ареста и условий их содержания, я начал осмотр лагерей, где содержались все задержанные. 10 го днем я отправился в лагерь № 2, расположенный на Александровском вокзале за конторой товарной станции; там было уже около 3.000 задержанных жителей. Из опроса их я выяснил, что все они задержаны немецкими патрулями, причем в большинстве случаев у них даже не рассматривали имевшихся на руках документов, а просто хватали попадавшихся мужчин и большими группами отводили в лагеря. В лагерях их окружал воинский караул, никуда не выпускал и не давал возможности арестованным предъявлять свои документы. Положение ухудшилось еще тем, что ни солдаты, ни офицеры караула не понимали русского языка и, кроме того, отказывались передавать какие бы то ни было просьбы коменданту лагеря, ссылаясь на то, что им это запрещено. К коменданту же извне тоже почти никого не допускали. После длительных переговоров мне удалось добиться, чтобы Ваше письмо, в котором Вы мне поручаете от Вашего имени добиваться освобождения задержанных, было передано коменданту лагеря.

Комендант, приняв меня, объяснил, что он не имеет права никого освобождать, что этим ведает и распоряжается комендатура города. Среди арестованных в числе многих других служащих находился ответственный бухгалтер комиссии по топливу и освещению, и я настоял на его немедленном освобождении. Оказалось, регистрации арестованных не было, и для опознания его меня повели в лагерь, где из расспросов арестованных я выяснил картину их арестов и положение арестованных: все явившиеся на сборный пункт (плац во дворе каланчи) бывшие военнослужащие были выстроены на плацу, и переводчик (в форме офицера русской службы) объявил, что ввиду опоздания их явки к регистрации они все отправляются в лагерь на Александровском вокзале, а при малейшем неповиновении по арестованным будет открыта стрельба. Затем всех повели на Александровский вокзал в лагерь № 2. Здесь в течение более трех часов их заставили стоять в сомкнутых колоннах, не позволяя даже выходить для отправления естественных надобностей. После этого бесцельного стояния в строю их пустили в общую массу арестованных. Всех арестованных целый день продержали на дворе без пищи и только к вечеру им выдали по чашке жидкого варева без хлеба.

Я приехал в 7 часов вечера, когда началась выдача пищи, и так как медленно выдавали, полагаю, что последние из арестованных получили обед к полуночи; на ночевку всех загнали в бараки. В бараках было грязно и настолько тесно, что на нарах разместилась незначительная часть заключенных, а остальные частью разместились под нарами, а частью из-за тесноты провели ночь на ногах. Еще хуже было в лагере № 1 на углу Широкой и Сторожевской улиц. Под лагерь приспособлены были так называемые артиллерийские казармы. В этот лагерь я вторично приехал в 8 час. вечера; вокруг двора и казармы обтянуты были проволочные заграждения, и поставлены пулеметы и цепи часовых. По мокрому болотистому двору в темноте бродили арестованные, из которых большинство были пожилые, совершенно не служившие в войсках, о чем у них имелись на руках письменные удостоверения. В казармах в нижнем этаже не было нар, во многих оконных рамах совершенно не было стекол; пол был настолько затоптан жидкой грязью, что трудно было даже ходить по нему, и естественно, что заключенные предпочитали слоняться по открытому болотистому двору, чем находиться в этом неосвещенном, холодном и очень грязном помещении. Я настойчиво требовал от караульного офицера, чтобы он освободил хотя бы тех, которые совершенно не служили в войсках и которые даже, по его словам, подлежат освобождению, тем более что, как я уже указывал, почти у всех на руках были документы, дающие исчерпывающие указания об их отношении к воинской повинности. Ответ был краток. За отсутствием официального переводчика бумаги рассмотрены не будут, и никто в этот день выпущен быть не может. На мое предложение доставить сейчас же несколько переводчиков из городского самоуправления или за счет городского самоуправления начальник караула ответил, что переводчик им будет затребован из комендатуры и что до прихода этого переводчика никто освобожден не будет. В этом лагере находилось около 600 человек; целую ночь вокруг лагеря бродили плачущие женщины, мужья, братья или сыновья которых содержались здесь. 11 го около 12 часов дня я опять был в этом лагере, к этому времени переводчика еще не было и никто отсюда освобожден не был.
Из лагеря № 1 вечером 10 апреля я отправился в немецкую комендатуру, но там никого не оказалось, у штадтгауптмана (градоначальника) меня тоже не приняли. Утром 11 го я был у штадтгауптмана г. Гершеля, которому я объяснил, что среди задержанных имеется большой процент никогда не служивших в войсках и имеющих в городе постоянную оседлость. Я указал ему на всю ненормальность постановки регистрации в лагерях и от имени городского самоуправления предлагал немедленно бесплатно дать достаточный штат переводчиков, которые быстро зарегистрируют всех задержанных по группам и категориям. Он предложил мне подать список служащих городского самоуправления, задержанных немецкими патрулями, а об остальных арестованных гражданах города он вести разговоры отказался, заявив, что за этим я должен обратиться в немецкую комендатуру. В комендатуре мне тоже предложили представить список служащих и уверили, что они будут освобождены и что, кроме того, будут освобождены все не служившие в войсках. От наших переводчиков отказались и в комендатуре. …

Поезд с арестованными из Минска отправился в 6 час. 10 мин. вечера, а посадка началась в 12 часов дня, так что на вокзале арестованные просидели в запертых вагонах около 6 часов. Двери вагонов были наглухо закрыты, и замки обмотаны проволокой. Из вагонов не выпускали даже для отправления естественных надобностей…».

Итак, два германских концлагеря существовали в Минске с 8 по 12 апреля 1918 г. Всего пять дней. Но кто скажет теперь, сколько заключенных за эти четыре дня умерли от холода, голода и болезней? Сколько матерей и жен терзалось неведением, сочтя, что их сыновья и мужья пропали безвестно?.. Эти пять дней – еще одна черная страница в отношениях Германии и Беларуси.
Впрочем, ничего удивительного в такой политике германских оккупантов не было — система концлагерей для местного населения была опробована ими на белорусах еще раньше. Так, после оккупации 15 сентября 1915 г. Слонима многих жителей города немцы разместили в концлагере, разместившемся на территории рабочего поселка «Альбертин» (с 1965 г. в городской черте Слонима). Так что на Минск просто распространялись немецкие порядки, внедрявшиеся в Западной Беларуси с осени 1915-го.

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

Немецкие солдаты на Губернаторской улице Минска (улица Ленина). С балкона виднеется «сьвяты» бело-красно-белый флаг прислужников оккупантов.
Итак, Ю. Латушковой – большое спасибо за интереснейший материал по истории Минска и Беларуси. Ну а материал Н. Стужинской можно разве что переименовать в «Историю одного из советских концлагерей Минска».

Впрочем, о компетенции Н. Стужинской как историка можно судить хотя бы потому, что она апеллирует к мифическому «миллиону погибших во время сталинских репрессий белорусов»: «В следующем, 2017 году, кроме 100-летних революционных юбилеев, — 80-летие огромной трагедии народов бывшего СССР, пик репрессий, унесших миллионы жизней. И наш белорусский миллион».

Эта взятая с потолка цифра привычно кочует по всем либеральным изданиям, хотя никогда не была подкреплена никакими источниками. Между тем российский историк А. Дюков путем кропотливых исследований неопровержимо доказал: общее количество казненных во всем СССР в период с 1921 по 1953 гг. составляет 973 000 человек, т.е. меньше миллиона. Что же касается «пика репрессий», о котором пишет Стужинская, то в 1935-1940 гг. в БССР было расстреляно 28 425 человек. Конечно, это немалая цифра, но все же далеко не миллион. Делим этот самый мифический миллион на 28 425 – и видим, что Стужинская произвольно завысила количество погибших от репрессий белорусов в 35 с лишним (!) раз. Почему – понятно: «миллион» поражает воображение обывателя и вообще звучит гораздо эффектнее, чем «некруглая» и «не такая уж и значительная» цифра 28 425. Только какое отношение такая математика имеет к истории – большой вопрос.

Игорь Орлович
Источник: http://teleskop-by.org

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