text:
////////////////////////////////////////////////////////////////////////////////
/// DISCLAIMER
///
/// Copyright 2014-2020 ArangoDB GmbH, Cologne, Germany
/// Copyright 2004-2014 triAGENS GmbH, Cologne, Germany
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
///     http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
/// Copyright holder is ArangoDB GmbH, Cologne, Germany
///
/// @author Michael Hackstein
////////////////////////////////////////////////////////////////////////////////

#include <algorithm>

#include "Agency/AgencyStrings.h"
#include "Agency/AsyncAgencyComm.h"
#include "Agency/TimeString.h"
#include "ApplicationFeatures/ApplicationFeature.h"
#include "ApplicationFeatures/CommunicationFeaturePhase.h"
#include "ApplicationFeatures/GreetingsFeaturePhase.h"
#include "ApplicationFeatures/SharedPRNGFeature.h"
#include "Aql/AqlFunctionFeature.h"
#include "Aql/AqlItemBlockSerializationFormat.h"
#include "Aql/ExecutionEngine.h"
#include "Aql/OptimizerRulesFeature.h"
#include "Aql/Query.h"
#include "Basics/StringUtils.h"
#include "Basics/files.h"
#include "Cluster/ActionDescription.h"
#include "Cluster/AgencyCache.h"
#include "Cluster/ClusterFeature.h"
#include "Cluster/CreateCollection.h"
#include "Cluster/CreateDatabase.h"
#include "Cluster/DropDatabase.h"
#include "Cluster/Maintenance.h"
#include "ClusterEngine/ClusterEngine.h"
#include "FeaturePhases/AqlFeaturePhase.h"
#include "FeaturePhases/BasicFeaturePhaseServer.h"
#include "FeaturePhases/ClusterFeaturePhase.h"
#include "FeaturePhases/DatabaseFeaturePhase.h"
#include "FeaturePhases/V8FeaturePhase.h"
#include "GeneralServer/AuthenticationFeature.h"
#include "GeneralServer/ServerSecurityFeature.h"
#include "IResearch/IResearchAnalyzerFeature.h"
#include "IResearch/IResearchCommon.h"
#include "IResearch/IResearchFeature.h"
#include "IResearch/IResearchLinkCoordinator.h"
#include "Logger/LogMacros.h"
#include "Logger/LogTopic.h"
#include "Logger/Logger.h"
#include "Network/NetworkFeature.h"
#include "Rest/Version.h"
#include "RestServer/AqlFeature.h"
#include "RestServer/DatabaseFeature.h"
#include "RestServer/DatabasePathFeature.h"
#include "RestServer/FlushFeature.h"
#include "RestServer/InitDatabaseFeature.h"
#include "RestServer/MetricsFeature.h"
#include "RestServer/QueryRegistryFeature.h"
#include "RestServer/SoftShutdownFeature.h"
#include "RestServer/SystemDatabaseFeature.h"
#include "RestServer/UpgradeFeature.h"
#include "RestServer/ViewTypesFeature.h"
#include "Scheduler/SchedulerFeature.h"
#include "Servers.h"
#include "Sharding/ShardingFeature.h"
#include "StorageEngine/EngineSelectorFeature.h"
#include "Transaction/Methods.h"
#include "Transaction/StandaloneContext.h"
#include "V8Server/V8DealerFeature.h"
#include "VocBase/vocbase.h"
#include "utils/log.hpp"

#include "Servers.h"
#include "TemplateSpecializer.h"

#include "IResearch/AgencyMock.h"
#include "IResearch/common.h"

#include "Mocks/PreparedResponseConnectionPool.h"

#if USE_ENTERPRISE
#include "Enterprise/Ldap/LdapFeature.h"
#include "Enterprise/License/LicenseFeature.h"
#include "Enterprise/StorageEngine/HotBackupFeature.h"
#endif

#include <velocypack/Builder.h>
#include <velocypack/Parser.h>
#include <velocypack/Slice.h>
#include <velocypack/velocypack-aliases.h>

#include <boost/core/demangle.hpp>
using namespace arangodb;
using namespace arangodb::consensus;
using namespace arangodb::tests;
using namespace arangodb::tests::mocks;

static void SetupGreetingsPhase(MockServer& server) {
  server.addFeature<arangodb::application_features::GreetingsFeaturePhase>(false, false);
  server.addFeature<arangodb::MetricsFeature>(false);
  server.addFeature<arangodb::SharedPRNGFeature>(false);
  server.addFeature<arangodb::SoftShutdownFeature>(false);
  // We do not need any further features from this phase
}

static void SetupBasicFeaturePhase(MockServer& server) {
  SetupGreetingsPhase(server);
  server.addFeature<arangodb::application_features::BasicFeaturePhaseServer>(false);
  server.addFeature<arangodb::ShardingFeature>(false);
  server.addFeature<arangodb::DatabasePathFeature>(false);
}

static void SetupDatabaseFeaturePhase(MockServer& server) {
  SetupBasicFeaturePhase(server);
  server.addFeature<arangodb::application_features::DatabaseFeaturePhase>(false);  // true ??
  server.addFeature<arangodb::AuthenticationFeature>(true);
  server.addFeature<arangodb::transaction::ManagerFeature>(false);
  server.addFeature<arangodb::DatabaseFeature>(false);
  server.addFeature<arangodb::EngineSelectorFeature>(false);
  server.addFeature<arangodb::StorageEngineFeature>(false);
  server.addFeature<arangodb::SystemDatabaseFeature>(true);
  server.addFeature<arangodb::InitDatabaseFeature>(true, std::vector<std::type_index>{});
  server.addFeature<arangodb::ViewTypesFeature>(false);  // true ??

#if USE_ENTERPRISE
  // required for AuthenticationFeature with USE_ENTERPRISE
  server.addFeature<arangodb::LdapFeature>(false);
  server.addFeature<arangodb::LicenseFeature>(false);
#endif
}

static void SetupClusterFeaturePhase(MockServer& server) {
  SetupDatabaseFeaturePhase(server);
  server.addFeature<arangodb::application_features::ClusterFeaturePhase>(false);
  server.addFeature<arangodb::ClusterFeature>(false);

  // fake the exit code with which unresolved futures are returned on
  // shutdown. if we don't do this lots of places in ClusterInfo will
  // report failures during testing
  server.getFeature<ClusterFeature>().setSyncerShutdownCode(TRI_ERROR_NO_ERROR);
}

static void SetupCommunicationFeaturePhase(MockServer& server) {
  SetupClusterFeaturePhase(server);
  server.addFeature<arangodb::application_features::CommunicationFeaturePhase>(false);
  // This phase is empty...
}

static void SetupV8Phase(MockServer& server) {
  SetupCommunicationFeaturePhase(server);
  server.addFeature<arangodb::application_features::V8FeaturePhase>(false);
  server.addFeature<arangodb::V8DealerFeature>(false);
}

static void SetupAqlPhase(MockServer& server) {
  SetupV8Phase(server);
  server.addFeature<arangodb::application_features::AqlFeaturePhase>(false);
  server.addFeature<arangodb::QueryRegistryFeature>(false);

  server.addFeature<arangodb::iresearch::IResearchAnalyzerFeature>(true);
  {
    auto& feature = server.addFeature<arangodb::iresearch::IResearchFeature>(true);
    feature.collectOptions(server.server().options());
    feature.validateOptions(server.server().options());
  }

  server.addFeature<arangodb::aql::AqlFunctionFeature>(true);
  server.addFeature<arangodb::aql::OptimizerRulesFeature>(true);
  server.addFeature<arangodb::AqlFeature>(true);

#ifdef USE_ENTERPRISE
  server.addFeature<arangodb::HotBackupFeature>(false);
#endif
}

MockServer::MockServer(arangodb::ServerState::RoleEnum myRole, bool injectClusterIndexes)
    : _server(std::make_shared<arangodb::options::ProgramOptions>("", "", "", nullptr), nullptr),
      _engine(_server, injectClusterIndexes),
      _oldRebootId(0),
      _started(false) {
  _oldRole = arangodb::ServerState::instance()->getRole();
  arangodb::ServerState::instance()->setRole(myRole);
  _originalMockingState = arangodb::ClusterEngine::Mocking;
  if (injectClusterIndexes && arangodb::ServerState::instance()->isCoordinator()) {
    arangodb::ClusterEngine::Mocking = true;
  }
  init();
}

MockServer::~MockServer() {
  stopFeatures();
  _server.setStateUnsafe(_oldApplicationServerState);

  arangodb::ClusterEngine::Mocking = _originalMockingState;
  arangodb::ServerState::instance()->setRole(_oldRole);
  arangodb::ServerState::instance()->setRebootId(_oldRebootId);
}

application_features::ApplicationServer& MockServer::server() {
  return _server;
}

void MockServer::init() {
  _oldApplicationServerState = _server.state();
  _oldRebootId = arangodb::ServerState::instance()->getRebootId();

  _server.setStateUnsafe(arangodb::application_features::ApplicationServer::State::IN_WAIT);
  arangodb::transaction::Methods::clearDataSourceRegistrationCallbacks();

  // many other places rely on the reboot id being initialized,
  // so we do it here in a central place
  arangodb::ServerState::instance()->setRebootId(arangodb::RebootId{1});
}

void MockServer::startFeatures() {
  using arangodb::application_features::ApplicationFeature;

  // user can no longer add features with addFeature, must add them directly
  // to underlying server()
  _started = true;

  _server.setupDependencies(false);
  auto orderedFeatures = _server.getOrderedFeatures();

  _server.getFeature<arangodb::EngineSelectorFeature>().setEngineTesting(&_engine);

  if (_server.hasFeature<arangodb::SchedulerFeature>()) {
    auto& sched = _server.getFeature<arangodb::SchedulerFeature>();
    // Needed to set nrMaximalThreads
    sched.validateOptions(
        std::make_shared<arangodb::options::ProgramOptions>("", "", "", nullptr));
  }

  for (ApplicationFeature& f : orderedFeatures) {
    auto info = _features.find(&f);
    if (info != _features.end()) {
      if (f.name() == "Endpoint") {
        // We need this feature to be there but do not use it.
        continue;
      }
      try {
        f.prepare();
      } catch (...) {
        LOG_DEVEL << "unexpected exception in "
                  << boost::core::demangle(typeid(f).name()) << "::prepare";
      }
    }
  }

  if (_server.hasFeature<arangodb::DatabaseFeature>()) {
    auto& dbFeature = _server.getFeature<arangodb::DatabaseFeature>();
    // Only add a database if we have the feature.
    auto const databases = arangodb::velocypack::Parser::fromJson(
        R"([{"name": ")" + arangodb::StaticStrings::SystemDatabase + R"("}])");
    dbFeature.loadDatabases(databases->slice());
  }

  for (ApplicationFeature& f : orderedFeatures) {
    auto info = _features.find(&f);
    // We only start those features...
    if (info != _features.end()) {
      if (info->second) {
        try {
          f.start();
        } catch (...) {
          LOG_DEVEL << "unexpected exception in "
                    << boost::core::demangle(typeid(f).name()) << "::start";
        }
      }
    }
  }

  if (_server.hasFeature<arangodb::DatabasePathFeature>()) {
    auto& dbPathFeature = _server.getFeature<arangodb::DatabasePathFeature>();
    // Inject a testFileSystemPath
    arangodb::tests::setDatabasePath(dbPathFeature);  // ensure test data is stored in a unique directory
    _testFilesystemPath = dbPathFeature.directory();

    long systemError;
    std::string systemErrorStr;
    TRI_CreateDirectory(_testFilesystemPath.c_str(), systemError, systemErrorStr);
  }
}

void MockServer::stopFeatures() {
  using arangodb::application_features::ApplicationFeature;

  if (!_testFilesystemPath.empty()) {
    TRI_RemoveDirectory(_testFilesystemPath.c_str());
  }

  // need to shut down in reverse order
  auto orderedFeatures = _server.getOrderedFeatures();
  std::reverse(orderedFeatures.begin(), orderedFeatures.end());

  // destroy application features
  for (ApplicationFeature& f : orderedFeatures) {
    auto info = _features.find(&f);
    // We only start those features...
    if (info != _features.end()) {
      if (info->second) {
        try {
          f.stop();
        } catch (...) {
          LOG_DEVEL << "unexpected exception in "
                    << boost::core::demangle(typeid(f).name()) << "::stop";
        }
      }
    }
  }

  for (ApplicationFeature& f : orderedFeatures) {
    auto info = _features.find(&f);
    // We only start those features...
    if (info != _features.end()) {
      try {
        f.unprepare();
      } catch (...) {
        LOG_DEVEL << "unexpected exception in "
                  << boost::core::demangle(typeid(f).name()) << "::unprepare";
      }
    }
  }
}

TRI_vocbase_t& MockServer::getSystemDatabase() const {
  TRI_ASSERT(_server.hasFeature<arangodb::DatabaseFeature>());
  auto& database = _server.getFeature<arangodb::DatabaseFeature>();
  auto system = database.useDatabase(arangodb::StaticStrings::SystemDatabase);
  TRI_ASSERT(system != nullptr);
  return *system;
}

MockMetricsServer::MockMetricsServer(bool start) : MockServer() {
  // setup required application features
  SetupGreetingsPhase(*this);
  addFeature<arangodb::EngineSelectorFeature>(false);

  if (start) {
    MockMetricsServer::startFeatures();
  }
}

MockV8Server::MockV8Server(bool start) : MockServer() {
  // setup required application features
  SetupV8Phase(*this);
  addFeature<arangodb::NetworkFeature>(false);

  if (start) {
    MockV8Server::startFeatures();
  }
}

MockV8Server::~MockV8Server() {
  if (_server.hasFeature<arangodb::ClusterFeature>()) {
    _server.getFeature<arangodb::ClusterFeature>().clusterInfo().shutdownSyncers();
    _server.getFeature<arangodb::ClusterFeature>().clusterInfo().waitForSyncersToStop();
    _server.getFeature<arangodb::ClusterFeature>().shutdownAgencyCache();
  }
}

MockAqlServer::MockAqlServer(bool start) : MockServer() {
  // setup required application features
  SetupAqlPhase(*this);

  if (start) {
    MockAqlServer::startFeatures();
  }
}

MockAqlServer::~MockAqlServer() {
  if (_server.hasFeature<arangodb::ClusterFeature>()) {
    _server.getFeature<arangodb::ClusterFeature>().clusterInfo().shutdownSyncers();
    _server.getFeature<arangodb::ClusterFeature>().clusterInfo().waitForSyncersToStop();
    _server.getFeature<arangodb::ClusterFeature>().shutdownAgencyCache();
  }
  arangodb::AqlFeature(_server).stop();  // unset singleton instance
}

std::shared_ptr<arangodb::transaction::Methods> MockAqlServer::createFakeTransaction() const {
  std::vector<std::string> noCollections{};
  transaction::Options opts;
  auto ctx = transaction::StandaloneContext::Create(getSystemDatabase());
  return std::make_shared<arangodb::transaction::Methods>(ctx, noCollections, noCollections,
                                                          noCollections, opts);
}

std::shared_ptr<arangodb::aql::Query> MockAqlServer::createFakeQuery(
    bool activateTracing, std::string queryString,
    std::function<void(aql::Query&)> callback) const {
  VPackBuilder queryOptions;
  queryOptions.openObject();
  if (activateTracing) {
    queryOptions.add("profile", VPackValue(int(aql::ProfileLevel::TraceTwo)));
  }
  queryOptions.close();
  if (queryString.empty()) {
    queryString = "RETURN 1";
  }

  auto query = arangodb::aql::Query::create(
      arangodb::transaction::StandaloneContext::Create(getSystemDatabase()),
      aql::QueryString(queryString), nullptr, arangodb::aql::QueryOptions(queryOptions.slice()));
  callback(*query);
  query->prepareQuery(aql::SerializationFormat::SHADOWROWS);

  return query;
}

MockRestServer::MockRestServer(bool start) : MockServer() {
  SetupV8Phase(*this);
  addFeature<arangodb::QueryRegistryFeature>(false);
  addFeature<arangodb::NetworkFeature>(false);
  if (start) {
    MockRestServer::startFeatures();
  }
}

std::pair<std::vector<consensus::apply_ret_t>, consensus::index_t> AgencyCache::applyTestTransaction(
    consensus::query_t const& trxs) {
  std::unordered_set<uint64_t> uniq;
  std::vector<uint64_t> toCall;
  std::unordered_set<std::string> pc, cc;
  std::pair<std::vector<consensus::apply_ret_t>, consensus::index_t> res;

  {
    std::lock_guard g(_storeLock);
    ++_commitIndex;
    res = std::pair<std::vector<consensus::apply_ret_t>, consensus::index_t>{
      _readDB.applyTransactions(trxs, AgentInterface::WriteMode{true,true}), _commitIndex}; // apply logs
  }
  {
    std::lock_guard g(_callbacksLock);
    for (auto const& trx : VPackArrayIterator(trxs->slice())) {
      handleCallbacksNoLock(trx[0], uniq, toCall, pc, cc);
    }
    {
      std::lock_guard g(_storeLock);
      for (auto const& i : pc) {
        _planChanges.emplace(_commitIndex, i);
      }
      for (auto const& i : cc) {
        _currentChanges.emplace(_commitIndex, i);
      }
    }
  }
  invokeCallbacks(toCall);
  return res;
}

consensus::Store& AgencyCache::store() { return _readDB; }

MockClusterServer::MockClusterServer(bool useAgencyMockPool,
                                     arangodb::ServerState::RoleEnum newRole,
                                     bool injectClusterIndexes)
    : MockServer(newRole, injectClusterIndexes), _useAgencyMockPool(useAgencyMockPool) {
  // Add features
  SetupAqlPhase(*this);

  _server.getFeature<ClusterFeature>().allocateMembers();

  addFeature<arangodb::UpgradeFeature>(false, &_dummy, std::vector<std::type_index>{});
  addFeature<arangodb::ServerSecurityFeature>(false);

  arangodb::network::ConnectionPool::Config config(_server.getFeature<MetricsFeature>());
  config.numIOThreads = 1;
  config.maxOpenConnections = 8;
  config.verifyHosts = false;
  addFeature<arangodb::NetworkFeature>(true, config);
}

MockClusterServer::~MockClusterServer() {
  auto& ci = _server.getFeature<arangodb::ClusterFeature>().clusterInfo();
  ci.shutdownSyncers();
  ci.waitForSyncersToStop();
  _server.getFeature<arangodb::ClusterFeature>().shutdownAgencyCache();
}

void MockClusterServer::startFeatures() {
  MockServer::startFeatures();

  arangodb::network::ConnectionPool::Config poolConfig(_server.getFeature<MetricsFeature>());
  poolConfig.clusterInfo = &getFeature<arangodb::ClusterFeature>().clusterInfo();
  poolConfig.numIOThreads = 1;
  poolConfig.maxOpenConnections = 3;
  poolConfig.verifyHosts = false;

  if (_useAgencyMockPool) {
    _pool = std::make_unique<AsyncAgencyStorePoolMock>(_server, poolConfig);
  } else {
    _pool = std::make_unique<PreparedResponseConnectionPool>(
        _server.getFeature<ClusterFeature>().agencyCache(), poolConfig);

    // Inject the faked Pool into NetworkFeature
    _server.getFeature<arangodb::NetworkFeature>().setPoolTesting(_pool.get());
  }

  arangodb::AgencyCommHelper::initialize("arango");
  AsyncAgencyCommManager::initialize(server());
  AsyncAgencyCommManager::INSTANCE->pool(_pool.get());
  AsyncAgencyCommManager::INSTANCE->updateEndpoints({"tcp://localhost:4000/"});
  arangodb::AgencyComm(server()).ensureStructureInitialized();
  std::string st = "{\"" + arangodb::ServerState::instance()->getId() +
                   "\":{\"rebootId\":1}}";
  agencyTrx("/arango/Current/ServersKnown", st);
  arangodb::ServerState::instance()->setRebootId(arangodb::RebootId{1});

  // register factories & normalizers
  auto& indexFactory = const_cast<arangodb::IndexFactory&>(_engine.indexFactory());
  auto& factory =
      getFeature<arangodb::iresearch::IResearchFeature>().factory<arangodb::ClusterEngine>();
  indexFactory.emplace(arangodb::iresearch::DATA_SOURCE_TYPE.name(), factory);
  _server.getFeature<arangodb::ClusterFeature>().clusterInfo().startSyncers();
}

std::shared_ptr<arangodb::aql::Query> MockClusterServer::createFakeQuery(
    bool activateTracing, std::string queryString,
    std::function<void(aql::Query&)> callback) const {
  VPackBuilder queryOptions;
  queryOptions.openObject();
  if (activateTracing) {
    queryOptions.add("profile", VPackValue(int(aql::ProfileLevel::TraceTwo)));
  }
  queryOptions.close();
  if (queryString.empty()) {
    queryString = "RETURN 1";
  }

  auto query = arangodb::aql::Query::create(
      arangodb::transaction::StandaloneContext::Create(getSystemDatabase()),
      aql::QueryString(queryString), nullptr, arangodb::aql::QueryOptions(queryOptions.slice()));
  callback(*query);
  query->prepareQuery(aql::SerializationFormat::SHADOWROWS);

  return query;
}

consensus::index_t MockClusterServer::agencyTrx(std::string const& key,
                                                std::string const& value) {
  // Build an agency transaction:
  auto b = std::make_shared<VPackBuilder>();
  {
    VPackArrayBuilder trxs(b.get());
    {
      VPackArrayBuilder trx(b.get());
      {
        VPackObjectBuilder op(b.get());
        auto b2 = VPackParser::fromJson(value);
        b->add(key, b2->slice());
      }
    }
  }
  return std::get<1>(
      _server.getFeature<ClusterFeature>().agencyCache().applyTestTransaction(b));
}

void MockClusterServer::agencyCreateDatabase(std::string const& name) {
  TemplateSpecializer ts(name);
  std::string st = ts.specialize(plan_dbs_string);

  agencyTrx("/arango/Plan/Databases/" + name, st);
  st = ts.specialize(current_dbs_string);
  agencyTrx("/arango/Current/Databases/" + name, st);

  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForPlan(agencyTrx("/arango/Plan/Version", R"=({"op":"increment"})="))
      .wait();
  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForCurrent(agencyTrx("/arango/Current/Version", R"=({"op":"increment"})="))
      .wait();
}

void MockClusterServer::agencyCreateCollections(std::string const& name) {
  TemplateSpecializer ts(name);
  std::string st = ts.specialize(plan_colls_string);
  agencyTrx("/arango/Plan/Collections/" + name, st);
  st = ts.specialize(current_colls_string);
  agencyTrx("/arango/Current/Collections/" + name, st);

  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForPlan(agencyTrx("/arango/Plan/Version", R"=({"op":"increment"})="))
      .wait();
  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForCurrent(agencyTrx("/arango/Current/Version", R"=({"op":"increment"})="))
      .wait();
}

void MockClusterServer::agencyDropDatabase(std::string const& name) {
  std::string st = R"=({"op":"delete"}))=";

  agencyTrx("/arango/Plan/Databases/" + name, st);
  agencyTrx("/arango/Plan/Collections/" + name, st);
  agencyTrx("/arango/Current/Databases/" + name, st);
  agencyTrx("/arango/Current/Collections/" + name, st);

  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForPlan(agencyTrx("/arango/Plan/Version", R"=({"op":"increment"})="))
      .wait();
  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForCurrent(agencyTrx("/arango/Current/Version", R"=({"op":"increment"})="))
      .wait();
}

void MockClusterServer::buildCollectionProperties(VPackBuilder& props,
                                                  std::string const& collectionName,
                                                  std::string const& cid, TRI_col_type_e type,
                                                  VPackSlice additionalProperties) {
  {
    // This is hand-crafted unfortunately the code does not exist...
    VPackObjectBuilder guard(&props);
    props.add(StaticStrings::DataSourceType, VPackValue(type));
    props.add(StaticStrings::DataSourceName, VPackValue(collectionName));
    props.add(StaticStrings::DataSourcePlanId, VPackValue(cid));
    props.add(StaticStrings::DataSourceId, VPackValue(cid));
    props.add(VPackValue(StaticStrings::Indexes));
    {
      VPackArrayBuilder guard2(&props);
      auto const primIndex = arangodb::velocypack::Parser::fromJson(
          R"({"id":"0","type":"primary","name":
"primary","fields":["_key"],"unique":true,"sparse":false
})");
      props.add(primIndex->slice());
      if (type == TRI_COL_TYPE_EDGE) {
        auto const fromIndex = arangodb::velocypack::Parser::fromJson(
            R"({"id":"1","type":"edge","name":
"edge_from","fields":["_from"],"unique":false,"sparse":false
})");
        props.add(fromIndex->slice());
        auto const toIndex = arangodb::velocypack::Parser::fromJson(
            R"({"id":"2","type":"edge","name":
"edge_to","fields":["_to"],"unique":false,"sparse":false})");
        props.add(toIndex->slice());
      }
    }

    if (additionalProperties.isObject()) {
      props.add(VPackObjectIterator(additionalProperties));
    }
  }
}

void MockClusterServer::injectCollectionToAgency(
    std::string const& dbName, VPackBuilder& velocy, DataSourceId const& planId,
    std::vector<std::pair<std::string, std::string>> shardNameToServerNamePairs) {
  agencyTrx("/arango/Plan/Collections/" + dbName + "/" +
                basics::StringUtils::itoa(planId.id()),
            velocy.toJson());
  {
    /* Hard-Coded section to inject the CURRENT counter part.
     * We do not have a shard available here that could generate the values accordingly.
     */
    VPackBuilder current;
    {
      VPackObjectBuilder report(&current);
      for (auto const& [shard, server] : shardNameToServerNamePairs) {
        current.add(VPackValue(shard));
        VPackObjectBuilder shardReport(&current);
        current.add(VPackValue(maintenance::SERVERS));
        {
          VPackArrayBuilder serverList(&current);
          current.add(VPackValue(server));
        }
        current.add(VPackValue(StaticStrings::FailoverCandidates));
        {
          VPackArrayBuilder serverList(&current);
          current.add(VPackValue(server));
        }
        // Always no error
        current.add(StaticStrings::Error, VPackValue(false));
        current.add(StaticStrings::ErrorMessage, VPackValue(std::string()));
        current.add(StaticStrings::ErrorNum, VPackValue(0));
        // NOTE: we omited Indexes
      }
    }
    agencyTrx("/arango/Current/Collections/" + dbName + "/" +
                  basics::StringUtils::itoa(planId.id()),
              current.toJson());
  }

  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForPlan(agencyTrx("/arango/Plan/Version", R"=({"op":"increment"})="))
      .wait();

  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForCurrent(agencyTrx("/arango/Current/Version", R"=({"op":"increment"})="))
      .wait();
}

// Create a clusterWide Collection.
// This does NOT create Shards.
std::shared_ptr<LogicalCollection> MockClusterServer::createCollection(
    std::string const& dbName, std::string collectionName,
    std::vector<std::pair<std::string, std::string>> shardNameToServerNamePairs,
    TRI_col_type_e type, VPackSlice additionalProperties) {
  std::string cid =
      std::to_string(_server.getFeature<ClusterFeature>().clusterInfo().uniqid());
  auto& databaseFeature = _server.getFeature<arangodb::DatabaseFeature>();
  auto vocbase = databaseFeature.lookupDatabase(dbName);

  VPackBuilder props;
  buildCollectionProperties(props, collectionName, cid, type, additionalProperties);
  LogicalCollection dummy(*vocbase, props.slice(), true);

  auto shards = std::make_shared<ShardMap>();
  for (auto const& [shard, server] : shardNameToServerNamePairs) {
    shards->emplace(shard, std::vector<ServerID>{server});
  }
  dummy.setShardMap(shards);

  std::unordered_set<std::string> const ignoreKeys{
      "allowUserKeys", "cid",     "globallyUniqueId", "count",
      "planId",        "version", "objectId"};
  dummy.setStatus(TRI_VOC_COL_STATUS_LOADED);
  VPackBuilder velocy =
      dummy.toVelocyPackIgnore(ignoreKeys, LogicalDataSource::Serialization::List);
  injectCollectionToAgency(dbName, velocy, dummy.planId(), shardNameToServerNamePairs);

  ClusterInfo& clusterInfo = server().getFeature<ClusterFeature>().clusterInfo();
  return clusterInfo.getCollection(dbName, collectionName);
}

MockDBServer::MockDBServer(bool start, bool useAgencyMock)
    : MockClusterServer(useAgencyMock, arangodb::ServerState::RoleEnum::ROLE_DBSERVER) {
  addFeature<arangodb::FlushFeature>(false);        // do not start the thread
  addFeature<arangodb::MaintenanceFeature>(false);  // do not start the thread
  if (start) {
    MockDBServer::startFeatures();
    MockDBServer::createDatabase("_system");
  }
  ServerState::instance()->setId("PRMR_0001");
}

MockDBServer::~MockDBServer() = default;

TRI_vocbase_t* MockDBServer::createDatabase(std::string const& name) {
  agencyCreateDatabase(name);
  // Now we must run a maintenance action to create the database locally,
  // unless it is the system database, in which case this does not work:
  if (name != "_system") {
    maintenance::ActionDescription ad(
        {{std::string(maintenance::NAME), std::string(maintenance::CREATE_DATABASE)},
         {std::string(maintenance::DATABASE), std::string(name)}},
        maintenance::HIGHER_PRIORITY, false);
    auto& mf = _server.getFeature<arangodb::MaintenanceFeature>();
    maintenance::CreateDatabase cd(mf, ad);
    cd.first();  // Does the job
  }
  agencyCreateCollections(name);

  auto& databaseFeature = _server.getFeature<arangodb::DatabaseFeature>();
  auto vocbase = databaseFeature.lookupDatabase(name);
  TRI_ASSERT(vocbase != nullptr);
  return vocbase;
};

void MockDBServer::dropDatabase(std::string const& name) {
  agencyDropDatabase(name);
  auto& databaseFeature = _server.getFeature<arangodb::DatabaseFeature>();
  auto vocbase = databaseFeature.lookupDatabase(name);
  TRI_ASSERT(vocbase == nullptr);

  // Now we must run a maintenance action to create the database locally:
  maintenance::ActionDescription ad(
      {{std::string(maintenance::NAME), std::string(maintenance::DROP_DATABASE)},
       {std::string(maintenance::DATABASE), std::string(name)}},
      maintenance::HIGHER_PRIORITY, false);
  auto& mf = _server.getFeature<arangodb::MaintenanceFeature>();
  maintenance::DropDatabase dd(mf, ad);
  dd.first();  // Does the job
}

void MockDBServer::createShard(std::string const& dbName, std::string shardName,
                               LogicalCollection& clusterCollection) {
  auto props = std::make_shared<VPackBuilder>();
  {
    // This is hand-crafted unfortunately the code does not exist...
    VPackObjectBuilder guard(props.get());
    props->add(StaticStrings::DataSourceType, VPackValue(clusterCollection.type()));
    props->add(StaticStrings::DataSourceName, VPackValue(shardName));
    // We need to set a value for CE testing here (default of 0 will be invalid in CE)
#ifndef USE_ENTERPRISE
    props->add(StaticStrings::ReplicationFactor, VPackValue(1));
#endif
    props->add(StaticStrings::InternalValidatorTypes,
               VPackValue(clusterCollection.getInternalValidatorTypes()));
  }
  maintenance::ActionDescription ad(
      std::map<std::string, std::string>{{maintenance::NAME, maintenance::CREATE_COLLECTION},
                                         {maintenance::COLLECTION,
                                          basics::StringUtils::itoa(
                                              clusterCollection.planId().id())},
                                         {maintenance::SHARD, shardName},
                                         {maintenance::DATABASE, dbName},
                                         {maintenance::SERVER_ID, "PRMR_0001"},
                                         {maintenance::THE_LEADER, ""}},
      maintenance::HIGHER_PRIORITY, false, props);

  auto& mf = _server.getFeature<arangodb::MaintenanceFeature>();
  maintenance::CreateCollection dd(mf, ad);
  bool work = dd.first();
  // Managed to create the collection, if this is true we did not manage to create the collections.
  // We can investigate Result here.
  // We may need to call next()
  TRI_ASSERT(work == false);

  // If this is false something above went wrong.
  TRI_ASSERT(dd.ok());

  // Add Indexes:
  // The Mock does not support generating INdexes from setup JSON.
  // It only supports manual index creation,
  if (clusterCollection.type() == TRI_COL_TYPE_EDGE) {
    auto& databaseFeature = _server.getFeature<arangodb::DatabaseFeature>();
    auto vocbase = databaseFeature.lookupDatabase(dbName);
    TRI_ASSERT(vocbase);
    auto col = vocbase->lookupCollection(shardName);
    // We just created it...
    TRI_ASSERT(col);

    {
      bool created = false;
      auto const idx = arangodb::velocypack::Parser::fromJson(
          R"({"id":"1","type":"edge","name":"edge_from","fields":["_from"],"unique":false,"sparse":false})");
      col->createIndex(idx->slice(), created);
      TRI_ASSERT(created);
    }

    {
      bool created = false;
      auto const idx = arangodb::velocypack::Parser::fromJson(
          R"({"id":"2","type":"edge","name":"edge_to","fields":["_to"],"unique":false,"sparse":false})");
      col->createIndex(idx->slice(), created);
      TRI_ASSERT(created);
    }
  }
}

MockCoordinator::MockCoordinator(bool start, bool useAgencyMock, bool injectClusterIndexes)
    : MockClusterServer(useAgencyMock, arangodb::ServerState::RoleEnum::ROLE_COORDINATOR,
                        injectClusterIndexes) {
  if (start) {
    MockCoordinator::startFeatures();
    MockCoordinator::createDatabase("_system");
    agencyTrx("/.agency", R"=({"op":"set", "new":{"timeoutMult":1,"term":1,"size":3,"pool":{"AGNT-ca355865-7e34-40b8-91d4-198811e52f44":"tcp://[::1]:4001","AGNT-93fa47f7-9f79-493e-b2da-b74487baccae":"tcp://[::1]:4003","AGNT-93908f62-5414-4456-be37-2226651b8358":"tcp://[::1]:4002"},"id":"AGNT-ca355865-7e34-40b8-91d4-198811e52f44","active":["AGNT-93908f62-5414-4456-be37-2226651b8358","AGNT-ca355865-7e34-40b8-91d4-198811e52f44","AGNT-93fa47f7-9f79-493e-b2da-b74487baccae"]}})=");
  }
}

MockCoordinator::~MockCoordinator() = default;

std::pair<std::string, std::string> MockCoordinator::registerFakedDBServer(std::string const& serverName) {
  VPackBuilder builder;
  std::string fakedHost = "invalid-url-type-name";
  std::string fakedPort = "98234";
  std::string fakedEndpoint = "tcp://" + fakedHost + ":" + fakedPort;
  {
    VPackObjectBuilder b(&builder);
    builder.add("endpoint", VPackValue(fakedEndpoint));
    builder.add("advertisedEndpoint", VPackValue(fakedEndpoint));
    builder.add("host", VPackValue(fakedHost));
    builder.add("version", VPackValue(rest::Version::getNumericServerVersion()));
    builder.add("versionString", VPackValue(rest::Version::getServerVersion()));
    builder.add("engine", VPackValue("testEngine"));
    builder.add("timestamp",
                VPackValue(timepointToString(std::chrono::system_clock::now())));
  }
  agencyTrx("/arango/Current/ServersRegistered/" + serverName, builder.toJson());
  _server.getFeature<arangodb::ClusterFeature>()
      .clusterInfo()
      .waitForCurrent(agencyTrx("/arango/Current/Version", R"=({"op":"increment"})="))
      .wait();
  return std::make_pair(fakedHost, fakedPort);
}

TRI_vocbase_t* MockCoordinator::createDatabase(std::string const& name) {
  agencyCreateDatabase(name);
  agencyCreateCollections(name);
  auto& databaseFeature = _server.getFeature<arangodb::DatabaseFeature>();
  auto vocbase = databaseFeature.lookupDatabase(name);
  TRI_ASSERT(vocbase != nullptr);
  return vocbase;
};

void MockCoordinator::dropDatabase(std::string const& name) {
  agencyDropDatabase(name);
  auto& databaseFeature = _server.getFeature<arangodb::DatabaseFeature>();
  auto vocbase = databaseFeature.lookupDatabase(name);
  TRI_ASSERT(vocbase == nullptr);
}

arangodb::network::ConnectionPool* MockCoordinator::getPool() {
  return _pool.get();
}

MockRestAqlServer::MockRestAqlServer() {
  SetupAqlPhase(*this);
  addFeature<arangodb::NetworkFeature>(false);
  MockRestAqlServer::startFeatures();
}


Last week may go down in history as a game-changer in the world of car safety. Two important announcements could reduce deaths and injuries from crashes for decades to come.
First, the National Highway Traffic Safety Administration (NHTSA) proposed that by 2015 new cars receiving the agency's coveted 5-Star Safety Rating must add new advanced vehicle safety technologies. These include automatic emergency braking, semi-automatic beam switching headlamps, lane departure warning, blind spot detection and other systems.
The second major announcement came from the Insurance Institute for Highway Safety (IIHS), which announced that 48 vehicles have earned the IIHS TOP SAFETY PICK+ award. These cars are all equipped with some advanced technologies and performed well in five areas that rate crashworthiness.
To be clear, these innovations are not about futuristic dreams or James Bond gadgets only available in luxury cars. IIHS reports that these potentially life-saving technologies are even available on some lower priced cars. For example, auto-braking is available in one model with a base price below $20,000. It is good policy and good business to make these technologies available to the greatest number of drivers; safety shouldn't only be for those who can afford it.
Today you can purchase a car that will help keep you in your lane, warn you if another vehicle is in your blind spot or even slam on the brakes if a front end collision appears imminent. I've tested these technologies and some require us to think and drive differently – all the more reason that we understand how they work.
For decades, during a crash, safety belts, air bags and crumple zones have proven their life-saving benefits. Now, the manufacturers and regulators are stepping up their game with new safety technologies that can help prevent the crash from ever happening.
Technology: You may love it or hate it, but it will play a vital role in making our roadways safer.


The ANC greater Johannesburg region moved swiftly to award Vincent Cosa a certificate of bravery. The party shared a picture of the hero dressed in an ANC election T-shirt.
Our charmza is hero Vincent Cosa for risking his life to rescue a boy stuck halfway on a pipe over the Jukskei river in Alexandra.
The boy found himself on the pipe because he usually saw other children playing in the area but when the storm hit, he sat there alone crying in fear.
When Cosa reached him, he convinced him to get on his back, before carrying him to safety.
Well done Vincent, you are a true hero.


As part of its Bob Dylan catalog restoration series, we are thoroughly humbled to have the privilege of mastering the iconic LP from the original master tapes and pressing it on dead-quiet LPs at RTI. The end result is the very finest, most transparent analog edition of Blood on the Tracks ever produced—and the first-ever proper analog reissue. Fantastically presenting both the solo acoustic and band-supported songs with the utmost clarity, dynamics, presence, immediacy, spaciousness, imaging, and balance, this version shines a high-powered light on the fluid vocal phrasing, timbral shifts, functional rhythms, and inward-looking strumming that contribute to every song here serving as a wound-exposing confessional.


Yale University has been putting lectures on the web for some time. They're all free, and you can download the files to your MP3 player and listen on the go, which is what I do. Here (http://oyc.yale.edu/english/introduction-to-theory-of-literature/) is an interesting one about modern literary theory taught by Paul Fry. It's 26 lectures, so you can pick and choose what interests you, and you can also download the syllabus. I recommend it.
There are quite a few interesting courses to be found on the site. I'm currently listening to one about the Civil War era.
www.openculture.com is a great source to keep up-to-date on what's available online.
They could use a better AV person. Perhaps there aren't any at Yale.
As the lecture progressed, he held back somewhat. But in spite of voice modulation challenges, he's a really good lecturer, imo. To the point, clear in meaning, just enough and not too much digression.
The AV is good enough for me to understand virtually every word with a little lip reading. And, I just checked to see if there are transcripts. Yep. Best for me is to listen while reading the transcript.
I dabbled online some time ago to see if any of the theory schools would work for me, and ended up liking James Wood, an anti-theory critic; also, Francine Prose. But I also enjoy Fry's knack for approaching theory in meta-theory way.
Do you have a favorite lit theory approach, CG?
I just finished this class at another school and can't get enough. I just found it yesterday and am on the fourth lecture. Exciting stuff!


Fresh from a West coast "Ten Cent Talkers Tour" and an appearance at AmericanaFest in Nashville, guitar-slinging, singer-songwriter Johnny "Chops" Richardson has announced an end-of-the-year run from December 6-22. Kicking off at DFW hotspot, Magnolia Motor Lounge, his "Lone Star Holiday" trek hits eight cities and includes an opening slot for Reckless Kelly at Antone's.
Chops recently released "Ten Cent Talkers," the third single from his sophomore album, Johnny Chops & The Razors, with a premiere via Americana tastemaker No Depression.
During the course of the 11-track trek, Richardson guides the listener on an expansive journey of geography and history. From the foot-stomping Louisiana grit of "Believer," to the Southern muscle of "Medicine," from the soulful Memphis swing of "Tombstone Flowers," and "Taking a Chance on Me," to the bluesy Texas twang of "Ten Cent Talkers," and "Gimme Sugar," to the Motown boogie-woogie of "Rock Bottom, to the Crossroads-inducing, gut-check of the blistering 7-minute "Only When You're Breathing," Chops and The Razors aptly strut their stuff.
Logging 100-150 dates per year, playing solo shows and touring throughout the U.S. with Randy Rogers Band, with whom he's played bass since 2002, Richardson will be on the road throughout October and November, as RRB loops from Texas to Boston and back, sharing select bills with Wade Bowen, Tracy Byrd, Cory Morrow, and Turnpike Troubadours.


I'm sure most of us have seen "lots" of snow. More than we had a short time ago in central Texas, for sure. But for central Texas, a lot of snow is unusual. Therefore, a lot of people took a lot of pictures. I'm no exception. When something weird happens I want pictures! So here are a few pictures from the snowfall on February 23, 2010.
First, my car, for comparison to the photo in my 2/23 post.
Flakes up close in the backyard.
Ivy and bushes along the fence.
We got a total of three inches of snow that day.


text:
Q: Unable to load Public Key with OpenSSL 1.0.1e-fips 11 Feb 2013 Unable to load public key with OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013, but it works at OpenSSL 1.0.2k-fips  26 Jan 2017.
I know that base64 line length is limited to 76 characters by default in openssl ( and generated with 64 characters / line ), why it allows at the latest updates, but not for old one.

unable to load Public Key 139727592335264:error:0906D064:PEM
  routines:PEM_read_bio:bad base64 decode:pem_lib.c:812:

[tmp]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[tmp]$ cat jon.pem
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAySaRaKhe41cqMSP+ZmlfdbvbAvb/p6i7sQd/VlBHJHqMU7FlhYgLknQEZ22n/IipK1BYXdM6dwE/gQ/EaJxCdsrDpVEfA7fJPIuQUHLHiXLmmck5wnu+9Jmrxa3H68WpBYgaV0Kg6EZmU9IK1upyKc/P6ugve4ry0Es4KWbyke0KgqpkvzJ75b/EorKxdBWzRAhYmjiOBI8A37F2aABuNAlFTwnSuzbPVtDWz3jfWCzX7lp9q2NrXZDBzzYQdhH7erm1U7UXlF3B9Hyf4enZ6/qj4f2qLDyobwi3ah7eMOzAEGcd2kihfSwIlmChDbUwt7ya4xVq7jbBBYyh49qqGwIDAQAB
-----END RSA PUBLIC KEY-----

[tmp]$ openssl rsa -RSAPublicKey_in -text -out key_rsa_convert.pem < jon.pem
unable to load Public Key
139727592335264:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:812:

[tmp]$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017
[amssys@APL14241APP001 tmp]$ cat jon.pem
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAySaRaKhe41cqMSP+ZmlfdbvbAvb/p6i7sQd/VlBHJHqMU7FlhYgLknQEZ22n/IipK1BYXdM6dwE/gQ/EaJxCdsrDpVEfA7fJPIuQUHLHiXLmmck5wnu+9Jmrxa3H68WpBYgaV0Kg6EZmU9IK1upyKc/P6ugve4ry0Es4KWbyke0KgqpkvzJ75b/EorKxdBWzRAhYmjiOBI8A37F2aABuNAlFTwnSuzbPVtDWz3jfWCzX7lp9q2NrXZDBzzYQdhH7erm1U7UXlF3B9Hyf4enZ6/qj4f2qLDyobwi3ah7eMOzAEGcd2kihfSwIlmChDbUwt7ya4xVq7jbBBYyh49qqGwIDAQAB
-----END RSA PUBLIC KEY-----

[amssys@APL14241APP001 tmp]$ openssl rsa -RSAPublicKey_in -text -out key_rsa_convert.pem < jon.pem
writing RSA key

redpajama_set_name: RedPajamaStackExchange


Charles Dickens, Jane Austen, Thomas Hardy – England has produced some of the world's most distinguished writers over the years. And many of these famous authors are inextricably linked with luxury hotels, so you can combine a fabulous stay with facilities of the highest quality with a taste of history and culture. We look at six luxury [Good Hotel Guide] (http://www.goodhotelguide.com/) hotels with strong literary links. Happy reading!
This small luxury hotel has very a strong connection to one of the best-selling novelists in history: Agatha Christie. Over the course 30 years beginning in the late 1930s, the murder-mystery writer spent a great deal of time here, often writing during the day. The hotel has a collection of her letters and photographs to peruse.
Since it opened in 1929, this island hotel has seen many literary figures pass through its doors, including playwright Noel Coward and novelist Agatha Christie. Coward was invited for the weekend by Archie Nettlefold, financier and the first owner of the hotel, and allegedly loved it so much that he stayed for three weeks.
Set on 20 acres of the Nottinghamshire countryside, this was the hotel of choice for Dame Barbara Cartland, a prolific romance writer. She stayed annually at Langar Hall on her way home to Hertfordshire from holidays in Scotland, and the flamboyant author's preferred bedroom is now named after her. It is, of course, quite romantic, with trompe l'oeil wallpaper and a large, cozy bed.
Moonfleet Manor in rural Dorset features in a famous children's novel by John Meade Falkner. Moonfleet, published in 1898, is an adventure story about pirates that has been adapted for TV, theater, and radio. The hotel is a stone's throw from Chesil Beach, which has its own literary link as the backdrop for Ian McEwan's 2008 novel On Chesil Beach.
Romance was definitely in the air at The Old Rectory in gorgeous Boscastle, Cornwall: it was where writer Thomas Hardy met his wife-to-be. Hardy had come to St Juliot Rectory, as it was known back in 1870, while working as an architect. There, he met Emma Lavinia Gifford, the rector's sister-in-law, and they instantly fell in love, marrying in 1874. The B&B has named the room where he slept after him—and it even has a writing desk.
This hotel in Bath has many literary associations—Dickens, Wells, Austen, Hardy, Shelley, Brontë, and Browning, to name just a few. The boutique hotel's tastefully decorated rooms are named after these famous authors and poets. Fans of Pride and Prejudice can book a stay at Tasburgh Hotel to coincide with the yearly Jane Austen festival in September—period costume is optional.


Today, ever developing proceeding of science and technology and medical knowledge with the aim of meeting the demands and needs of human to achieve experience and knowledge, has caused the medicine science to come in line with medical equipment so that these two, are complements and could develop, in accompany of each other. Meanwhile, high importance of providing medical services for comfort of patients in most societies has highlighted the role of medical equipment.
As the most widely used medical instrument and because of direct contract of the operators with hospital beds, this equipment are of special importance & has highlighted role in providing satisfaction and comfort to patients and medical staff. Endurance, strength and ease of application are outstanding features of these instruments. Given that hospital beds are included in the category of hospital hoteling, "beauty" is of special importance and, of course, in this modern world, the combination of art & technology, is a strategy which will cause improvement and manufacturing of products that not only will satisfy the consumer's needs in terms of efficiency, longevity and quality, but also psychologically and aesthetically. Sina has based his mission on this. In his mind introduction of a beautiful and innovative product will finally grant the beauty of hospital's cold and stressful environment.
we are aggressively investing to ensure our customers that we are well positioned not only for using the newest technology, experienced staff, innovation and the art of creativity but also special features of our products based on patients and caregiver's demands.
Mr. Hamdollah Ghazanfari founder of Sina group of companies, started his activity in the field of medical equipment since 1971, with the name of Sina Metal Industries. Today after 40 years and with the name of Sina Hamd Aria, which is a private joint stock company that produces hospital hoteling equipment and mainly hospital beds, in the area over 15000 m2. Sina owns more than 30% of market share and is the leading supplier.
Sina unique system of management is led by participatory management and expert forces.
Sina participatory management system is based on establishing teams of strategic councils of quality and collaborative teams of scope & brand which are guided by indirect supervision of the board of directors.
Strategic council: Composed of middle-rank and senior managers with the aim of leading and fulfilling predetermined strategies.
Collaborative & brand teams. Consist of creative & idea- generating members for matters related to partnership in order to reduce costs, submit policies and manage Sina brand.
Scope Team: surveys & monitors the market and manages the contact with the costumers and consists of sales experts and senior managers.
Quality team: Consists of representatives of manufacturing, engineering, quality control, sales and after sales services, with the aim of supervising and monitoring the quality of products, packaging, handling complaints and comments of customers in groups.


text:
Vermont Agriculture Secretary Chuck Ross speaks at a Dec. 14 meeting at the Latchis Theatre in Brattleboro on new federal food safety regulations.
Feds bring new food rules to Brattleboro
Wide-ranging impacts of the Food Safety Modernization Act discussed; officials promised a large-scale educational effort to help food producers understand and comply with the new rules
BRATTLEBORO—The range of discussion Monday morning at Brattleboro's Latchis Theatre – from questions about butternut squash to concerns about global imports – shows the sweep of the federal government's new food-safety rules.
But as federal and state officials worked to explain some of those rules to attendees who traveled from at least six other states, there was a common theme: Public education is critical, as is more federal funding to ensure that such education happens.
For Vermont Agriculture Secretary Chuck Ross, the concern is ensuring that "the most significant rewrite of our food safety laws in 70 years" is understood by and fairly applied to the wide variety of farmers and food producers in the Green Mountain State.
"If this partnership is going to work – and that means work for the producers and the manufacturers – we need to have the FDA and the state partners fully equipped and able to implement this law in the ways that were envisioned," Ross said.
The meeting was convened to discuss three of the seven new rules created under authority of the Food Safety Modernization Act, approved by Congress in late 2010 and signed by President Barack Obama the following month.
The act is geared toward curbing food-borne illness, which the U.S. Food and Drug Administration says affects one in six people in the United States – about 48 million people – annually. The law, the FDA says, is supposed to bolster food safety by "shifting the focus of federal regulators from responding to contamination to preventing it."
The FDA spent years developing new food-safety rules, which are available at www.fda.gov/FSMA.
Mike Taylor, the FDA's deputy commissioner for foods and veterinary medicine, said those rules first were proposed in 2013. But an initial round of public comment showed that there were "significant issues," Taylor said, so the FDA went back to work – in part by taking a New England tour.
The result was an amended set of rules that govern issues such as preventive controls for human food; preventive controls for animal food; and produce safety – the three regulations discussed at Monday's meeting convened for the Northeast region.
Elements of the "human food" rule include mandatory establishment of written food-safety plans that include hazard analysis – which must take into account "known or reasonably foreseeable biological, chemical and physical hazards" – as well as "risk-based preventive controls" governing such matters as allergens, sanitation, and the food-supply chain.
The produce safety rule includes water quality regulations aimed at controlling E. coli; guidance for applying raw manure and compost; requirements to prevent contamination of sprouts; and regulations for worker training, health, and hygiene among other topics.
One lesson learned from the FDA's New England tour in 2013, Taylor told the Brattleboro audience, was "just how truly diverse our food system is." And he promised that, in implementing the new food-safety rules, protecting that diversity will be "a central theme of our work."
"It has influenced the way in which we've written these regulations so that they are flexible, and they are adaptable to diverse settings," Taylor said.
Taylor recalled a recent admonition from Ross: "You must educate before you regulate." And he's promising to take that even further when it comes to the Food Safety Modernization Act, pledging that the FDA will be "educating not only before, but while we regulate."
To that end, the FDA is working on guidance documents that will spell out how food producers and handlers should comply with the new law.
Officials also are working to expand their partnerships with states, with Taylor noting that half of the FDA's inspections already are conducted by states under contract with the federal agency.
The Food Safety Modernization Act authorizes federal grants for training, inspections, lab-capacity expansion, and other activities at the state level.
And Taylor said the federal government, in an attempt to ensure a level playing field for U.S. farmers and food producers who must abide by the new rules, is going to change the way it regulates imported food.
The FDA says 15 percent of the U.S. food supply is imported, including 60 percent of fresh fruits and vegetables and 80 percent of the country's seafood.
Currently, the agency focuses on inspections of food samples at points of entry into the country. Under the Food Safety Modernization Act, the FDA will be auditing food importers and also conducting more overseas inspections at farms and manufacturing facilities, Taylor said.
But all of those changes require money, and that is no given. The Obama administration reportedly has requested a $109.5 million increase in FDA funding, but Congress has not yet settled on a number.
"We cannot build an entirely new system without new resources. And so that's really what's at stake in the budget process that's going on," Taylor said. "It's not just about building up the FDA. It's largely about investing in the food system itself."
Officials at Monday's meeting praised Vermont's congressional delegation for its support of such funding. U.S. Sen. Patrick Leahy, D-Vt., backed the FDA's funding request in the fiscal 2016 appropriations process and will again make it a priority during the fiscal 2017 process, spokesman David Carle said.
The senator "agrees that sufficient funding is crucial for these new regulations to be rolled out in a way that works for Vermont food producers, that protects public health and that does not saddle the Vermont Agency of Agriculture, Food & Markets with a large unfunded mandate," Carle said.
In the meantime, organizations like the University of Vermont Extension are working to help food producers cope with new rules.
Brattleboro-based UVM Extension professor Vern Grubinger said that, due to exemptions for smaller operations, there is "a relatively small number of farms" in Vermont that will have to comply with the new produce rule.
But Grubinger believes that "the marketplace will demand that all growers do something to address food safety." So the Extension, along with the state Agency of Agriculture and others, will be working to help farmers understand "what they need to do both to comply with FSMA and to maintain their markets," Grubinger said after Monday's meeting.
One way for Vermont's smaller vegetable and berry producers to help bolster their food-safety practices is a new pilot program called Community Accreditation for Produce Safety.
It's a voluntary, online effort that will offer non-regulatory accreditation through the Vermont Vegetable and Berry Association, Grubinger said. More information is available at practicalproducesafetyvt.wordpress.com.
Such efforts may be critical given the growth and prominence of Vermont's food and agricultural business sectors. Ross told the Latchis Theatre crowd that there have been 4,200 food and agriculture jobs created in the state over the past five years.
"We've been seeing this part of the economy grow by over 6 percent in the last five years, which is well above the statewide average," Ross said. "So this is real economics for the state of Vermont, and quite significant."
Originally published in The Commons issue #336 (Wednesday, December 16, 2015). This story appeared on page A1.
www.fda.gov/FSMA
practicalproducesafetyvt.wordpress.com

redpajama_set_name: RedPajamaCommonCrawl


This centrifuge is used for milk-analysis, for example, for the determination of the amount of fat in milk.
The Funke Gerber LactoStar is a used in dairies for the routine analysis of milk. This chemical milk analysis device features fully automatic cleaning and rinsing system and zero point calibration for fast and accurate testing.


text:
Exploring by Foot
Kenai Fjords Cruise
Sightseeing & Relaxing
AWA Lodges
Lodge-to-Lodge Package - 2 Lodges
AWA Adventures
Adventures That Include This Lodge
Whales & Wildlife
Pedersen Lagoon Sanctuary
The AWA Experience
Conservation Program
Ecotourism in Action
Package Rates & Info
$2 a Day for Conservation
Prepare to Go
Helpful Travel Links
Alaska Travel Links
Seward, Alaska
Recommended Accommodations
Outstanding Alaska wildlife viewing is a highlight of the Kenai Fjords Glacier Lodge experience
By land or sea, Kenai Fjords National Park offers some of the best wildlife viewing in Alaska. Featuring multiple ways to explore the protected seacoast, a stay at Kenai Fjords Glacier Lodge allows guests to seek out amazing wildlife sightings by foot, kayak and small boat cruise.
Depending on the time of year, Kenai Fjords National Park plays host to three different species of whale. The California Gray Whale can be found frolicking in the Kenai Fjords in early summer, en route to their final destination of Alaska's Bering and Chukchi Seas (these whales have the longest migratory pattern of any mammal - over 12,500 miles of coastline between Alaska's northern seas and Mexico's Baja Peninsula!). Humpback Whales also frequent these waters; learn about their diverse methods of feeding such as baleen straining and the group bubble net technique. In addition, there are three varieties of Orca Whale seen in Kenai Fjords National Park in the summertime; year-round resident Orcas eat fish while the migratory Orcas prey on other marine mammals. Further from the coast, offshore Orcas will even prey on sharks.
In addition to whale watching, seek out Steller sea lions, sea otters, Dall's porpoises and more on the marine wildlife and glacier cruise. Bald eagles and puffins represent some of the most charismatic examples of the myriad of birdlife that call the park home; some 18 different species of seabird flock to the Kenai Fjords to nest each year, resulting in a vibrant population of over 50,000 birds.
On site, harbor seals, sea and river otters, mountain goats, black bears, bald eagles and a multitude of birdlife cavort - often in view from the main lodge or your cabin. By land or by sea, the abundant Alaska wildlife of Kenai Fjords National Park is sure to be a highlight of your stay at Kenai Fjords Glacier Lodge.
KENAI FJORDS GLACIER LODGE © All Rights Reserved
P. O. BOX 389 Girdwood, Alaska 99587
Request a Brochure Reservation Request Special Offers Email Newsletter Contact Us
"We are very impressed with the 'eco-ness' and building of this lodge. I feel privileged to be among the first visitors here… it was so exciting discovering our first sea otters and brown bear! Many thanks for the great care, food and comfort." - Phillida & Mike E., NZ
All-inclusive Alaska Vacations


Range Hood Extension Interior | Singlemamalife.com broan range hood extension. cavaliere range hood extension. range hood extension.
Range Hood Extension Amazing AKDY PTRH004LCEX Island Mount Outer Chimney In 2. Range Hood Extension Awesome The Best Hoods In Canada And USA Wall Pertaining To 3. Range Hood Extension Popular Rangecookers Select Chimney Accessories Pertaining To 4. Range Hood Extension Brilliant Air Conditioners Hoods Factory Direct Outlet Inside 5. Range Hood Extension Popular Microvisor Microwave System Pertaining To 6. Range Hood Extension Modern Telescopic Stainless Steel Chimney Cover For SV218 Series Within 7. Range Hood Extension Popular Wall Chimney Kit In Stainless Steel EXTKIT12ES The 8. Range Hood Extension Incredible Stainless Steel Rangehood Flue Alltrade Regarding 9. Range Hood Extension Attractive Installation Photo Whirlpool Kit Intended For 10. Range Hood Extension Contemporary Amazon Com Nxr Ch30 12 Stainless Steel Chimney Cover Within 11. Range Hood Extension Modern Kenmore Elite 58110 Large Flue Within 12. Range Hood Extension Stylish Shop Parts At Lowes Com For 13. Range Hood Extension Popular 11 Best Chimney Vent Images On Pinterest Kitchen Hoods In 14. Range Hood Extension Popular 17 Best ZLINE Glass Hoods Images On Pinterest Cooker Intended For 15. Range Hood Extension Brilliant Spectacular Deal On Whirlpool Wall Mounted Flue Regarding 16. Range Hood Extension Stylish Amazon Com Microvisorhood A Mini For Your Pertaining To 17. Range Hood Extension Elegant Amazon Com Kobe RA02DC 24 1 Chimney For KOBE Premium In 18. Range Hood Extension Contemporary Shop Whirlpool Wall Mounted Flue Stainless Throughout 19.


RULE I - GAME LENGTH & FORMAT: There will be NO OVERTIME in any pool play game and the game can end in a tie. There will be a 5-minute interval at the half. The home team is listed on the schedule first, they will have field side selection and provide two approved game balls. In the event the uniform color is in conflict the home team must change.
DURING GAMES, BOTH TEAMS AND COACHES ARE TO BE TOGETHER ON THE SAME SIDE OF THE FIELD AND THEIR SPECTATORS ARE TO BE LOCATED TOGETHER ON THE OPPOSITE SIDELINE OF THE FIELD. NO EXCEPTIONS UNLESS CAUSED BY FIELD LAYOUT OR TOURNAMENT DIRECTOR.
RULE II - PLAYER PASSES/BOOKS and GUEST PLAYERS: The ONLY acceptable proof of age will be a VALID USSF, state, or national/province pass/book that includes the signature and photograph of the player. Players not presenting a VALID player pass/book at registration will not play. At any time, a player pass must be available for viewing during ALL games by a referee, or tournament director. Rosters may include up to three (3) guest players. These guest players SHALL replace players who could not attend the tournament. Rosters may not be changed after tournament registration. At no time, may any player(s) in this Tournament register or play for more than one tournament team. Any player(s) found doing so will be removed from the Tournament. Any team using a player either not validated at registration or dual-rostered, will forfeit all games in which the player(s) participated and such conduct will be reported to its respective state/provincial soccer association. Passes may be checked prior to championship matches as well as any other pool play game.
RULE III - SUBSTITUTIONS: There is no limit to the number of substitutions per game. Referee approval is required for any substitution. Prior to either team's throw in, prior to a goal kick, after a goal, during halftime, injury to player are all in effect with referee approval.
CARD" or dismissal. "RED CARDS" and dismissals will be reported to the New York State West Youth Soccer Association (NYSWYSA). Passes/books will be held at Tournament headquarters until the suspension is fulfilled. Passes/books held at headquarters as a result of "last game RED CARDS" will be sent to the NYSWYSA Rochester Commissioner and held until the suspension is served. NYSWYSA will communicate and forward any passes/books held to the visiting player/coach home association. Any incident of referee assault (or abuse) will, in accordance with USSF Rule 3042, be referred immediately to NYSWYSA. Home state/provincial associations and the home club/league shall, except in the case of referee assault, have the responsibility for imposing, should circumstances warrant, additional sanctions within their respective jurisdiction with regard to any matters arising from the Tournament.
RULE V - FORFEITS: In the event a team does not appear at the scheduled game time or leaves the field before conclusion of a game, a 3-0 score/win will be awarded its opponent at the discretion of the Tournament Director. All teams must be at their assigned field at least 15 minutes before the start of their games. Teams not at their assigned fields 10 minutes after the scheduled start will forfeit that game. All decisions of the Tournament Director and the Resolution Committee are final. Teams not properly registered before the start of their first game will forfeit all games until proper registration and paperwork are completed. IN NO CASE, SHALL A TEAM WHICH FORFEITS A GAME BE CONSIDERED FOR A PLAY-OFF POSITION OR BE CONSIDERED A DIVISION CHAMPION, FINALIST, OR RUNNER-UP.
FIFA penalty kicks tie-breaking procedure under the supervision of the head referee.
Ties at the end of regulation time in championship: semi-final or play-off games (where applicable) will be broken by the FIFA penalty kicks tie-breaking procedure; there are no overtimes. Note that, for example, if a 3-way tie for a championship finalist is broken in favor of one team using these procedures, then only 2 teams remain tied for the second tournament finalist slot; the tie-break between these two teams is then decided all over again starting with step #1 above. Awards will be presented, as a minimum, to division champions and runners-up. Standings will not be kept in U-8, U-9 and U-10 divisions; participation awards will be presented to all players in U-8, U-9 and U-10 divisions.
RULE VII – INCLEMENT WEATHER: Coaches and players must appear on the field ready to play at their scheduled time, regardless of weather conditions, unless advised otherwise by the Tournament Director. Only the referee or the Tournament Director may cancel or suspend a game. In the event of inclement weather before a game, referees or the Tournament Director may delay the game or reduce its length by 50%; furthermore, the Tournament Director may, at her sole discretion, reduce the length of subsequent games on the schedule by up to 50% and/or change scheduled field locations if deemed necessary to complete the entire schedule by the end of the day due to the impact of extended inclement weather. If a game in progress is terminated due to weather conditions and one half of the game has been completed, then that game will be considered official and the score final.
RULE VI11 - TEAM SIDES OF THE FIELD: At all games, unless field conditions make the rule unsafe or unreasonable, the home team and the fans shall be on the opposite side of the field from the visiting teams and its fans. The home team has its choice of sides. If the pitch has stadium seating the teams should sit on opposite sides of the center of the field with reasonable room between the spectators. Referees will be instructed not to begin the game until teams and fans comply with this rule. No players or fans are permitted behind the goals at any time during the game.
Any discrepancies are to be addressed prior to the start of the game with the Field Marshal, who will in turn contact the tournament director and please note that at that time their decision will be final.
RULE IX - PLAYER EQUIPMENT: Players must wear shin guards and proper uniforms in accordance with FIFA, USSF, and NYSWYSA guidelines. The "Home" team as specified on the schedule has first choice of uniforms; the "Visiting" team will wear its uniform which contrasts with that of the "Home" team. In the event that the "Visiting" team does not have a uniform which contrasts sufficiently with that of the "Home" team in the opinion of the referee, both teams will cooperate and change uniforms as necessary in order that the game may proceed. The "Home" team will provide a ball for the game, size 4 for U12 and younger, size 5 for all other age groups.
unsportsmanlike conduct. Any such participant, coach, team parent, team supporter, and/or the entire team (a) will be subject to immediate dismissal from the Tournament at the sole discretion of the Tournament Director; (b) may be held liable; and/or (c) may be barred from any future Spencerport functions.
RULE XI - PROTESTS: Referee decisions are final and are not subject to protest.
RULE XII - RESOLUTION COMMITTEE: The Resolution Committee shall consist of the Tournament Co-Directors and one representative from the Scoring Committee. The Resolution Committee reserves the right to decide on all matters pertaining to the Tournament, including interpretation of the foregoing Rules and Regulations of Competition. In the event that a situation occurs which is not covered by or is ambiguous in the Tournament Rules and Regulations of competition, that situation will revert to the Resolution Committee for a decision based upon the spirit and intent of that situation. The issue that is to be resolved must be submitted in writing with a bond check of $100 to the tournament director. The fee will be refunded if it is decided by the committee that the issue brought forth is upheld. The decisions of the Resolution Committee are final.
This document is to acknowledge the fact that the head coach of the ____________________ (include age and gender) team has read and understands the rules of the 2019 Westside Invitational Canal Cup Soccer Tournament. This form is to be signed and turned in at your team's registration.
A written copy of the official tournament rules can be viewed and printed at www.spencerportsoccerclub.org or http://hiltonparmasoccerclub.com/ under the tournament information tab.
Thank you in advance for your support with this and we look forward to being your host this year!


Compact Compression Load Cell PR 6211. Compression load cells from 30 kg to 10 t. Specially designed for tank and hopper weighing as well as basic dosing systems.
types of mill for coal pulverising. Types Of Mill For Coal Pulverising. coal pulverising mill types.
de 225 kW de potencia a 1.800 rev/min. Monta un molino impactor de 950 x 700 mm de boca y el rotor puede montar de dos a.


Cowboys quarterback Dak Prescott discusses the team's decision to release receiver Dez Bryant.
Bryant turned down a three-year, $21 million offer from the Baltimore Ravens shortly after his release, and it's unknown whether he's fielded more offers.
Bryant, 29, has expressed a desire to stay within the NFC East and sign with one of the Cowboys' rivals – the New York Giants, Washington Redskins or Philadelphia Eagles.
Bryant also hinted at being intrigued by possibly playing with the San Francisco 49ers.
For now, though, Bryant is biding his time and is in wait-and-see mode. He may not find his next stop until a team's top receiver sustains an injury in the offseason or training camp.
As far as the Cowboys are concerned, they have embraced life without Bryant. The team may not have a No. 1 receiver, but they're confident they can still be successful.
"It's going well, man," Beasley said. "Everybody is moving around a lot. A lot of guys are getting to play a lot of positions they haven't really gotten an opportunity to. It's really cool to kind of move around and try something new."


text:
Home » New Boat Showrooms » Jeanneau New Boat Models » 2023 Jeanneau NC Sport 795 Series 2
2023 Jeanneau NC Sport 795 Series 2
TheNC 795 Sport Series 2 was created for adventure seekers in search of new destinations and thrilling experiences all year long. Whether cruising through the San Juan Islands of the Pacific Northwest or working your way through the turquoise waters of the Bahamas, the NC 795 Sport Series 2 offers great inside living to escape the elements when the weather becomes too hot, too cold, or too wet. Powered by your choice of a single Yamaha 150HP or 250HP outboard engine, the NC 795 Sport Series 2 with its versatile hull design and will cruise all day long at 26 mph with an average fuel range of 140 miles.
Clever and adaptable to suit the needs of our clients, the NC 795 Sport Series 2 offers two exterior layouts.
Version 1, The Entertainment Version: As the name suggests, the Entertainment Version is designed around creating comfortable spaces for you and your guests to enjoy together. The cockpit for example can be had with your choice of either a large bench seat or exterior galley complete with gas cooktop or live-well located along the back of the pilothouse. Access to the main salon is gained using the lateral sliding door to starboard or an optional double door on the port side of the pilothouse. Step inside and you'll find the copilot seat which can pivot back and forth creating a table area when at anchor. For additional seating, a large full-width bench seat is positioned at the back of the pilothouse.
Version 2, The Circulation Version: In this version, large sliding glass doors at the back of the pilothouse allow for easy access between the main salon and the cockpit. As an option, a second exterior helm station can be had on the starboard side of the cockpit, ideally suited for those that like to fish. The main salon is equipped with twin bucket seats forward, a freshwater sink to port, and an optional third bucket seat to port.
Regardless of which version is right for you, the NC 795 Series 2 features a super comfortable and versatile forward cockpit that is perfect for hanging out with friends and family. In addition, the L-shaped seating can fully convert to a massive sunpad when at anchor. There is also access for storage down below via the front bench seat.
For the captain, electric steering (SBW) is available along with an optional autopilot for true comfort at the helm. There is also an optional single-engine Yamaha joystick and or bow thruster for easy handling while docking.
Wide side decks provide for easy movement fore and aft and for overnights, there is a good-size berth below along with is equipped with a private head compartment.
Model: NC Sport 795 Series 2
Beam: 9'3 ft
Min Draft: 3 ft
Bridge Clearance: 7'9 ft
Dry Weight: 4,799 lb
Cabins Count: 1
Make: Yamaha
Boat Class: Cruisers, Cuddy Cabin


Associate Professor (Medicine), Delhi University, R & R Army Hospital, Delhi, and was HOD, Respiratory Center and Immunodefiency (HIV) Center, Base Hospital, Delhi.
Your participation in the survey will help other patients make informed decisions. You will also be helping Dr.(Col) R.S. Chatterji and his staff know how they are doing and how they can improve their services.
How was your experience with Dr.(Col) R.S. Chatterji?
He has undertaken 2 Research Projects in relation to HIV AIDS.
Note: If you are Dr.(Col) R.S. Chatterji or an authorized personnel to manage his profile select the appropriate option to continue.


text:
GuggenheimNEW YORK
FIRST RETROSPECTIVE OF MAURIZIO CATTELAN – SOLOMON R. GUGGENHEIM MUSEUM | NY
Maurizio Cattelan L.O.V.E., 2010 Carrara marble, figure: 470 x 220 x 72 cm; base: 630 x 470 x 470 cm
First Retrospective of Maurizio Cattelan Opening November 4 at the Guggenheim
Entire Body of Work Suspended in Guggenheim Rotunda as a Site-Specific Installation
Exhibition: Maurizio Cattelan: All
Venue: Solomon R. Guggenheim Museum, 1071 Fifth Avenue, New York
Dates: November 4, 2011 – January 22, 2012
Media Preview: November 3, 10 am – 1 pm
(NEW YORK, NY – October 3, 2011). The Solomon R. Guggenheim Museum presents Maurizio Cattelan: All, the first retrospective of the internationally acclaimed artist's work, from November 4, 2011, to January 22, 2012. Hailed simultaneously as a provocateur, prankster, and tragic poet of our times, Maurizio Cattelan (b. 1960) has created some of the most unforgettable images in recent contemporary art. His source materials range widely, from popular culture, history, and organized religion to a meditation on the self that is at once humorous and profound. Working in a vein that can be described as hyperrealist, Cattelan creates unsettlingly veristic sculptures that reveal contradictions at the core of today's society. While bold and irreverent, the work is also deadly serious in its scathing cultural critique. Maurizio Cattelan: All brings together some 130 works—examples of virtually everything the artist has produced since 1989—and presents the works en masse, strung seemingly haphazardly from the oculus of the museum's rotunda in a site-specific installation. An interactive, multimedia mobile app—the first the Guggenheim has ever produced—will offer both museum visitors and users off-site an enhanced experience of the exhibition that includes images, texts about the works, and video commentary by many of the artist's key collaborators. In addition to a fully illustrated catalogue, a new edition of Cattelan's magazine Toilet Paper, featuring images conceived and photographed by Cattelan and Pierpaolo Ferrari, will be presented on the occasion of the exhibition. Maurizio Cattelan: All is organized by Nancy Spector, Deputy Director and Chief Curator, Solomon R. Guggenheim Foundation.
The Leadership Committee for Maurizio Cattelan: All is gratefully acknowledged.
Maurizio Cattelan We, 2010 Polyester resin, polyurethane, rubber, paint, human hair, fabric, and wood, 68 x 148 x 78.7 cm © Maurizio Cattelan Photo: Pierpaolo Ferrari, courtesy the artist
"Cattelan's career resists summation by any traditional exhibition format," said Spector. "Many of his early, action-based meditations are impossible to reconstruct, and his singular, iconic objects function best in isolation. Maurizio Cattelan: All is thus a full-scale admission of the inadvisability of viewing his work within the context of a conventional chronological retrospective. The artist has resisted this model, creating instead a site-specific installation that cunningly celebrates its futility. Perversely encapsulating Cattelan's career to date in an overly literal, three-dimensional catalogue raisonné, the installation lampoons the idea of comprehensiveness."
Cattelan's youth in the Italian city of Padua was marked by economic hardship at home, punishment at school, and a string of unfulfilling, menial jobs. These early experiences instilled in him an abiding mistrust of authority and a disdain for the drudgery of labor that haunts much of his early production. He describes his work from the late 1980s and early 1990s as being "about the impossibility of doing something…about insecurity, about failure." His pronounced anxiety about not succeeding was manifested in a series of performative escape routes from his artistic obligations. Bereft of ideas for his first solo exhibition in 1989, Cattelan simply closed the gallery and hung up a sign reading Torno subito, or "Be back soon." His early contributions to group shows were equally delinquent: in 1992, his participation in an exhibition at the Castello di Rivara near Turin consisted of a rope of knotted bed sheets dangling from an open window (Una Domenica a Rivara [A Sunday in Rivara]), while his response to the pressure of exhibiting at the Venice Biennale was to lease his allotted space to an advertising agency, which installed a billboard promoting a new perfume (Working Is a Bad Job, 1993).
Cattelan's disruptive and disrespectful gestures have at times taken the form of creative theft and even overtly criminal activity. For an exhibition at the de Appel arts center in Amsterdam, he stole the entire contents of another artist's show from a nearby gallery with the idea of passing it off as his own work (Another Fucking Readymade, 1996), until the police insisted he return the loot on threat of arrest. Cattelan's anarchist streak extends to works that revolve around issues of his Italian identity and the tensions of the country's ever-shifting political landscape. In response to a wave of xenophobic sentiment, he formed a soccer team composed entirely of North African immigrants who played in both outdoor competitions and in exhibition settings on an elongated foosball table (Stadium, 1991). Their uniforms bore the emblem Rauss, which recalled the Nazi phrase Juden raus, or "Jews get out."
Maurizio Cattelan La Rivoluzione siamo noi, 2000 Polyester resin, wax, pigment, felt suit, and metal coat rack, figure: 123.8 x 35.6 x 43.2 cm; coat rack: 189.9 x 47 x 52.1 cm Courtesy of the artist. © Maurizio Cattelan Photo: Attilio Maranzano
Cattelan has also turned to his own distinctive features as a mainstay of his iconography, constructing a series of sculptural vignettes that promote his image as an Everyman, playing the part of the fool so that we don't have to. Notable examples include La Rivoluzione siamo noi (We are the revolution, 2000), which presents a diminutive Cattelan dangling by his collar from a metal coat rack, impudently dressed in the signature felt suit of German artist Joseph Beuys, and a 2001 installation created for the Museum Boijmans Van Beuningen in Rotterdam that depicts the artist peering mischievously from a hole in the floor at a gallery of Old Master paintings. Some of Cattelan's surrogates have been more allusive, such as the 2008 work Daddy Daddy, an installation first shown in the fountain on the Guggenheim's rotunda floor, that depicts the puppet Pinocchio—another rebellious Italian boy with an oversized nose—floating facedown as if the victim of a tragic tumble from the ramps above.
Although an ironic humor threads much of his work, a profound meditation on mortality forms the core of Cattelan's practice. His recurring use of taxidermy, which presents a state of apparent life premised on actual death, is particularly apt for exploring this thematic concern. Perhaps the most poignant of his anthropomorphic animal scenes is Bidibidobidiboo (1996), in which a despairing squirrel has committed suicide in his grimy kitchen. Death stalks the artist's psyche and creeps into all manifestations of his production. With All (2007), he created what he described as a "monument to death," a sculpture that would commemorate its unrelenting presence. Derived from ubiquitous media imagery of fallen bodies, and carved from traditional marble, the nine shrouded figures appear as victims of some unnamed trauma, silently recalling the unconscionable realities of our present-day world.
Among Cattelan's most startling projects is a cycle of lifelike waxworks that portray and contest iconic authority figures. The most incendiary of these works comprise La Nona Ora (The ninth hour, 1999), his notorious sculpture of Pope John Paul II felled by a meteorite, and Him (2001), a rendering of Adolf Hitler in the scale of a young boy, kneeling preposterously in a pose of supplication. Also included is the sculpture Frank and Jamie (2002), in which two New York City policemen are turned upside down and propped against a wall in a posture that has been interpreted as a visual parallel to the sense of vulnerability that permeated the country in the wake of the terrorist attacks of September 11, 2001. A more overtly elegiac scene is constructed by Now (2004), an effigy of a serene and barefoot John F. Kennedy lying in state, a martyr to a shattered American idealism seen from the perspective of a disillusioned present.
Maurizio Cattelan Novecento, 1997 Taxidermied horse, lea
The Installation
The dramatic site-specific installation is visible to visitors on the ground floor and on each ascending ramp at varied heights. Hoisted by rope as if on a gallows, the objects explicitly reveal the undertone of death that pervades the artist's work. The exhibition is an exercise in disrespect: the artist has hung up his work like laundry to dry. Like all of his individual objects, the new installation resonates with multiple interpretive valences. Cattelan has certainly used the motif of suspension before, most notably in the poetically elongated sculpture created from a taxidermied horse, Novecento (1997), but here it takes on epic proportions. In total, the installation looks like a mass execution – and will, for the duration of the exhibition, constitute an overarching, tragic artwork in its own right.
Artist's Retirement
More than just a powerful culmination of a career, this exhibition signifies its end. With the opening of Maurizio Cattelan: All, Cattelan has announced his retirement from the art world. What this means precisely remains to be defined by the artist. Over time we expect to see a continuation of his work with the publication Toilet Paper as part of his fascination with print media. But the rest is anyone's guess.
Founding Members: Steven A. and Alexandra M. Cohen Foundation; Amalia Dayan and Adam Lindemann; Massimo De Carlo; Danielle and David Ganek; Judie and Howard Ganek; Marian Goodman; The Mugrabi Collection; Gael Neeson and Stefan Edlis; Galerie Perrotin; Amy and John Phelan; Samantha and Aby Rosen; Fondazione Sandretto Re Rebaudengo, Turin; Beth Swofford; Lisa and Steven Tananbaum; David Teiger; and those who wish to remain anonymous.
Maurizio Cattelan Untitled, 2001
For the first time in its history, the Guggenheim has produced a mobile app to accompany an exhibition—the interactive, multiplatform Maurizio Cattelan: All. The app features dramatic views of the Guggenheim installation and provides extensive documentation of Cattelan's artworks, actions, and other projects, both enriching the experience of visiting the exhibition and offering a dynamic exploration of it outside the museum's walls.
In short videos, filmmaker John Waters introduces the app and its sections. Exhibition curator Nancy Spector presents an illuminating examination of Cattelan's oeuvre, while exhibition engineers and artwork conservators offer a behind-the-scenes look at putting the show together. In more than 20 video interviews—some shot by the subjects themselves—a career's worth of Cattelan's friends and associates speak about the artist and his creative process. Contributors include critic Vince Aletti; artist Carsten Höller; curators Francesco Bonami, Germano Celant, Bice Curiger, Massimiliano Gioni, and Chrissie Iles; and gallerists Marian Goodman, Massimo De Carlo, and Emmanuel Perrotin. Listen to audio clips of Cattelan's own reflections on his works read by Waters, and enjoy additional highlights including images from issues of the artist's new magazine, Toilet Paper, plus a special preview of its latest edition, created on the occasion of the retrospective. The app will be available on iPhone, iPad, and Android at $3.99 for phone and $5.99for tablet at guggenheim.org/cattelan-app
Maurizio Cattelan Mini Me, 1999
The retrospective will be accompanied by a fully illustrated catalogue conceived as a play on the traditional catalogue raisonné, featuring nearly every work of Cattelan's from the late 1980s to the present, with accompanying interpretive entries. The volume includes a detailed critical overview by Nancy Spector, documenting not only Cattelan's artistic output but also his ongoing activities as a curator, editor, and publisher, as well as a comprehensive exhibition history and bibliography. The catalogue will be available in hardcover and e-book editions for $45 and $19.99 at the Guggenheim Store (hardcover only) or online at guggenheimstore.org.
Education and Public Programs
A range of public programs will be presented in conjunction with Maurizio Cattelan: All and details will be posted on guggenheim.org/publicprograms. Highlights include:
Workshop for Educators : Maurizio Cattelan: All Sat, Nov 19, 10 am–1 pm Through encounters with Maurizio Cattelan's unique sculptural installation in the museum rotunda, educators engage in conversations and activities that focus on how the artist's work can be used in the classroom. $20 includes curriculum materials. Registration required by calling 212 423 3637.
.-.-..-.
Guggenheim International Gala to be Held on November 10 in Celebration of the Maurizio Cattelan Retrospective
Featuring a Unique Musical Performance by MGMT
Maria Baibakova, Alberto Mugrabi, Amy Phelan, Kara Ross, and Jennifer Blei Stockman to Serve as Gala Chairs
November 7 Auction at Phillips de Pury & Company to Benefit Guggenheim Foundation
New York, NY – The Guggenheim Museum will host the annual Guggenheim International Gala on Thursday, November 10, at the Solomon R. Guggenheim Museum, in celebration of the exhibition Maurizio Cattelan: All. Cocktails begin at 7 pm on the rotunda floor. Dinner is at 8 pm followed by an after-party with the premiere of a unique musical performance by MGMT.
Chairs of the event include Maria Baibakova, Alberto Mugrabi, Amy Phelan, Kara Ross, and Jennifer Blei Stockman.
In association with the Guggenheim International Gala, a benefit auction will be held on the evening of Monday, November 7, at Phillips de Pury & Company, 450 Park Avenue, New York, immediately preceding the Contemporary Art Part I sale. Works to be auctioned include pieces by Cai Guo-Qiang, Maurizio Cattelan, George Condo, Hans-Peter Feldmann, Subodh Gupta, Jenny Holzer, Idris Khan, Bharti Kher, Lee Bul, Lee Ufan, Nate Lowman, Adam McEwen, Richard Phillips, Rob Pruitt, Sterling Ruby, Doris Salcedo, Richard Serra, Francesco Vezzoli, Lawrence Weiner, and Haegue Yang.
Funds raised from the gala and auction will support the Solomon R. Guggenheim Foundation.
2011 Guggenheim International Gala
7 pm Cocktails on the rotunda floor
8 pm Dinner in the rotunda galleries
9:30 pm After-party with a unique musical performance by MGMT
PLACE: Solomon R. Guggenheim Museum, 1071 Fifth Avenue at 89th Street, New York
For information on gala tickets or the auction, contact Maela Jones at 212 360 4309 or mjones@guggenheim.org.
Tickets to the after-party with a unique musical performance by MGMT will go on sale Thursday, October 13, for Guggenheim Museum members and Friday, October 14, for the general public and will be available at guggenheim.org. Tickets to the after-party are $150 for members and $200 for nonmembers.
Position the cursor on the images to view captions, click on images to enlarge them.
Posizionare il cursore sulle immagini per leggere le didascalie; cliccare sulle immagini per ingrandirle.
About the Solomon R. Guggenheim Foundation
Founded in 1937, the Solomon R. Guggenheim Foundation is dedicated to promoting the understanding and appreciation of art, primarily of the modern and contemporary periods, through exhibitions, education programs, research initiatives, and publications. Currently the Solomon R. Guggenheim Foundation owns and operates the Guggenheim Museum on Fifth Avenue in New York and the Peggy Guggenheim Collection on the Grand Canal in Venice, and provides programming and management for the Guggenheim Museum Bilbao. The Deutsche Guggenheim in Berlin is the result of a collaboration, begun in 1997, between the Guggenheim Foundation and Deutsche Bank. The Guggenheim Abu Dhabi, a museum of modern and contemporary art designed by Frank Gehry on Saadiyat Island, adjacent to the main island of Abu Dhabi city, the capital of the United Arab Emirates, is currently in progress. More information about the foundation can be found at guggenheim.org.
Admission: Adults $18, students/seniors (65+) $15, members and children under 12 free. Admission includes an audio tour of highlights of the Guggenheim's permanent collection, as well as of the Building, available in English, Spanish, French, German, and Italian.
Museum Hours: Sun–Wed, 10 am–5:45 pm; Fri, 10 am–5:45 pm; Sat, 10 am–7:45 pm; closed Thurs. On Saturdays, beginning at 5:45 pm, the museum hosts Pay What You Wish. For general information, call 212 423 3500 or visit the museum online at: guggenheim.org
EventsNEW YORK
THE ECONOMY OF FOOD AT BRAC – BRONX, NY
LAS VEGASLONDONLondon BiennaleNEW YORKROMEStudio.ravideo film & live performances
MAJOR EXHIBITION OF GLOBAL 1960s SCULPTURE OPENS MARCH 14 – THE JEWISH MUSEUM – NEW YORK
MAJOR EXHIBITION OF GLOBAL 1960S SCULPTURE – JEWISH MUSEUM – NEW YORK
BY THE LAKESIDE - SULLE RIVE DEL LAGO - CONTEMPORARY ARTS CENTRE OF COMO
SENTIMIENTOS ENVASADOS AL VACIO- FILIPPOS TSITSOPOULOS 2011 ANTIGUO INSTITUTO JOVELLANOS- GIJON


text:
Protecting scholars and the freedom to think, question, and share ideas
SAR's Academic Freedom Monitoring Project investigates and reports attacks on higher education with the aim of raising awareness, generating advocacy, and increasing protection for scholars, students, and academic communities. Learn more.
Date of Incident: April 20, 2014
Attack Types: Killings, Violence, Disappearances
Institution(s):Imam Kadhim College
Region & Country:Western Asia | Iraq
New or Ongoing:New Incident
On Sunday, April 20, 2014, two armed men and a suicide bomber attacked the main gate of Imam Kadhim College in Baghdad, Iraq. The college is a private Shiite institution located in the Ur district of the northeastern section of the city. Surveillance footage captured video of two armed men running away from the scene, followed by a suicide bomber, who detonated his bomb seconds later. According to several sources, one teacher and four policemen were killed. In addition, eighteen other civilians were wounded. The militant group ISIS (the Islamic State of Iraq and the Levant) claimed responsibility for the attack, reportedly stating that the university had repeatedly "cursed" the prophet Mohammed and "trained" its students to fight Sunni Muslims in Iraq and Syria.
Scholars at Risk is concerned about violent attacks on university campuses. Such attacks threaten the lives and well-being of members of higher education communities; undermine higher education functions, autonomy and academic freedom; and impair the ability of the higher education to serve its public mission. All members of higher education communities, and all members of society, benefit from this mission, and all parties to a conflict have a responsibility to respect the autonomy, safety, and security of the higher education space.
https://sg.news.yahoo.com/suicide-bomber-attacks-university-north-baghdad-093242589.html
http://leadership.ng/news/366957/1-killed-9-wounded-suicide-bomb-attack-baghdad
http://www.usatoday.com/story/news/world/2014/04/21/suicide-bombings-attacks-in-iraq-kill-19-people/7956605/
http://www.globaltimes.cn/content/855706.shtml
←Back to Index
Tweets by @ScholarsAtRisk
SAR Europe
Board & Ambassadors Council
SAR Sections
Host a Scholar
Scholars in Prison Project
Student Advocacy Seminars
Academic Freedom Legal Clinics
Academic Freedom Monitoring Project
Scholar Resources
Attacks on Higher Education
SAR Spotlight
Academic Freedom Media Review
Free to Think
SAR Publications
411 Lafayette St., 3rd Floor, New York, NY 10003
TEL: 1-212-998-2179 / FAX: 1-212-995-4427
EMAIL: scholarsatrisk@nyu.edu
© 2009 – 2019 Scholars at Risk Network


text:
#ifndef TimeoutSample_server_h
#define TimeoutSample_server_h

int server();

#endif

/* EOF */

redpajama_set_name: RedPajamaGithub


This Town and Country Puzzle is created by American Folk Art Painter, Cheryl Bartley! Featuring folksy scenes of small town life, these puzzles would be a great way to bring the family together. Piece it together, and display it for the world to see!
Puzzle contains 300 EZ Grip big pieces.
Note: This item comes in assorted styles (A: Autumn Pumpkin, B: Country Stope, C: Patriotic Town, D: Vineyard, E: Boardwalk). You may not receive item pictured.
If you would like to specify a style, please contact our Customer Service department at 1-800-888-0321. Press 1 to speak with a representative.