ETH Price: $2,147.59 (+3.10%)

Contract

0xeAF4E8bcAEDf7026e07e424EA5c0dAe1421B4543
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Market Pool ...160059752022-11-19 18:53:111219 days ago1668883991IN
0xeAF4E8bc...1421B4543
0 ETH0.0037992219.51141339
Add Market Pool160059732022-11-19 18:52:471219 days ago1668883967IN
0xeAF4E8bc...1421B4543
0 ETH0.0053817419.57148596
Add Market Pool ...160059712022-11-19 18:52:231219 days ago1668883943IN
0xeAF4E8bc...1421B4543
0 ETH0.0037832519.43181115
Add Market Pool160059702022-11-19 18:52:111219 days ago1668883931IN
0xeAF4E8bc...1421B4543
0 ETH0.0052207918.98700485
Add Market Pool ...160059682022-11-19 18:51:471219 days ago1668883907IN
0xeAF4E8bc...1421B4543
0 ETH0.0049408818.6722474
Add Market Pool160059672022-11-19 18:51:351219 days ago1668883895IN
0xeAF4E8bc...1421B4543
0 ETH0.0052644419.14490805
Add Market Pool ...160059662022-11-19 18:51:231219 days ago1668883883IN
0xeAF4E8bc...1421B4543
0 ETH0.0036841318.92036206
Add Market Pool160059642022-11-19 18:50:591219 days ago1668883859IN
0xeAF4E8bc...1421B4543
0 ETH0.0052071418.93650523
Add Market Pool ...160059632022-11-19 18:50:471219 days ago1668883847IN
0xeAF4E8bc...1421B4543
0 ETH0.0037850519.43866954
Add Market Pool160059612022-11-19 18:50:231219 days ago1668883823IN
0xeAF4E8bc...1421B4543
0 ETH0.0047459617.26010984
Add Market Pool ...160059592022-11-19 18:49:591219 days ago1668883799IN
0xeAF4E8bc...1421B4543
0 ETH0.005129219.38572011
Add Market Pool160059582022-11-19 18:49:471219 days ago1668883787IN
0xeAF4E8bc...1421B4543
0 ETH0.0052471819.08213957
Add Market Pool ...160059562022-11-19 18:49:231219 days ago1668883763IN
0xeAF4E8bc...1421B4543
0 ETH0.0037324619.16857289
Add Market Pool160059552022-11-19 18:49:111219 days ago1668883751IN
0xeAF4E8bc...1421B4543
0 ETH0.005283819.21613338
Add Market Pool ...160059542022-11-19 18:48:591219 days ago1668883739IN
0xeAF4E8bc...1421B4543
0 ETH0.0038056119.54425868
Add Market Pool160059522022-11-19 18:48:351219 days ago1668883715IN
0xeAF4E8bc...1421B4543
0 ETH0.0053369519.40859403
Add Market Pool ...160059512022-11-19 18:48:231219 days ago1668883703IN
0xeAF4E8bc...1421B4543
0 ETH0.0049531318.71857139
Add Market Pool160059502022-11-19 18:48:111219 days ago1668883691IN
0xeAF4E8bc...1421B4543
0 ETH0.0048874617.77396137
Add Market Pool ...160059482022-11-19 18:47:471219 days ago1668883667IN
0xeAF4E8bc...1421B4543
0 ETH0.0035457418.21078931
Add Market Pool160059462022-11-19 18:47:231219 days ago1668883643IN
0xeAF4E8bc...1421B4543
0 ETH0.004550916.55074272
Add Market Pool ...160059442022-11-19 18:46:591219 days ago1668883619IN
0xeAF4E8bc...1421B4543
0 ETH0.0032835216.8629859
Add Market Pool160059432022-11-19 18:46:471219 days ago1668883607IN
0xeAF4E8bc...1421B4543
0 ETH0.0046338716.85249216
Add Market Pool ...160059422022-11-19 18:46:351219 days ago1668883595IN
0xeAF4E8bc...1421B4543
0 ETH0.0041661715.74450839
Add Market Pool160059402022-11-19 18:46:111219 days ago1668883571IN
0xeAF4E8bc...1421B4543
0 ETH0.004231815.38953968
Add Market Pool ...160059392022-11-19 18:45:591219 days ago1668883559IN
0xeAF4E8bc...1421B4543
0 ETH0.0030563615.6963482
View all transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xC39Cf560...df89cee10
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
OddsSwap

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-07
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }
}


abstract contract Context is ReentrancyGuard{
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );


    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

  
    function owner() public view virtual returns (address) {
        return _owner;
    }


    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

interface ERC20Interface {
    function transferFrom(address _from, address _to, uint _value)external;
    function allowance(address _owner, address _spender) external returns (uint remaining);
}

interface BEP20Interface {
    function transferFrom(address _from, address _to, uint256 _value)external;
}


contract WalletPayment{
    address private _betTokenAddress;
    address private _tokenPoolAddress;
    bool private ifEth;

    function _getIfEth()internal view returns (bool){
        return ifEth;
    }

    function _setIfEth(bool _ifEth)internal {
       ifEth = _ifEth;
    }

    function _getBetTokenAddress()internal view returns (address){
        return _betTokenAddress;
    }

    function _setBetTokenAddress(address betTokenAddress_)internal {
        require(betTokenAddress_!=address(0),"WalletPayment:Address can not be zero.");
        _betTokenAddress=betTokenAddress_;
    }

    function _getTokenPoolAddress()internal view returns (address){
        return _tokenPoolAddress;
    }

    function _setTokenPoolAddress(address tokenPoolAddress_)internal {
        require(tokenPoolAddress_!=address(0),"WalletPayment:Address can not be zero.");
        _tokenPoolAddress=tokenPoolAddress_;
    }

    function _payBetToken(uint256 amount)internal {
        require(amount>0,"WalletPayment:Amount can not be zero.");
        if(ifEth){
          require(ERC20Interface(_betTokenAddress).allowance(msg.sender,address(this))>=amount,"WalletPayment: transfer amount exceeds allowance");
          ERC20Interface(_betTokenAddress).transferFrom(msg.sender,_tokenPoolAddress,amount);
        }else{
          BEP20Interface(_betTokenAddress).transferFrom(msg.sender,_tokenPoolAddress,amount);
        }
        
    }

    function _payBetTokenToUser(address to ,uint256 amount)internal {
        require(to!=address(0),"WalletPayment:Address can not be zero.");
        require(amount>0,"WalletPayment:Amount can not be zero.");
         if(ifEth){
          require(ERC20Interface(_betTokenAddress).allowance(_tokenPoolAddress,address(this))>=amount,"WalletPayment: transfer amount exceeds allowance");
          ERC20Interface(_betTokenAddress).transferFrom(_tokenPoolAddress,to,amount);
           }else{
          BEP20Interface(_betTokenAddress).transferFrom(_tokenPoolAddress,to,amount);
        }
    }
}

  


contract  WalletAccountDomain{

  struct WalletAccountEntity{
      address userAddress;
      uint256 balance;
      uint256 createTime;
      uint256 updateTime;
  }
}

contract WalletAccountService is WalletAccountDomain{

  mapping(address=>WalletAccountEntity) private  walletAccounts;

  function _balanceOperation(address user,bool income,uint256 amount) internal  returns(uint256 newBalance){
    require(user!=address(0),"WalletAccountService:Address can not be zero.");
    require(amount>0,"WalletAccountService:Amount can not be zero.");

    WalletAccountEntity storage account = walletAccounts[user];
    if(account.createTime ==0){
      account.userAddress = user;
      account.balance=0;
      account.createTime=block.timestamp;
      account.updateTime=block.timestamp;
    }
    if(income){
      newBalance = account.balance + amount;
    }else{
      require(account.balance>=amount,"WalletAccountService : Insufficient Balance");
      newBalance =  account.balance - amount;
    }
    account.balance = newBalance;
    account.updateTime = block.timestamp;
  }

  function _balanceOf(address user) internal view returns(uint256){
    return walletAccounts[user].balance;
  }
  

}

contract WalletService is WalletAccountService,WalletPayment{
  function _withdraw(uint256 amount) internal {
    uint256 balance = _balanceOf(msg.sender);
    require(amount>0,"WalletService : Amount can not be zero.");
    require(balance >= amount,"WalletService : Insufficient Balance");
    _balanceOperation(msg.sender,false,amount);
    _payBetTokenToUser(msg.sender,amount);
  } 
}


contract Sequence{
  mapping(string =>uint256) private  sequences;
  function _current(string memory seqKey) internal view returns(uint256){
    return sequences[seqKey];
  }

  function _increment(string memory seqKey) internal returns(uint256){
    uint256 seqValue = sequences[seqKey];
    seqValue = seqValue +1;
    sequences[seqKey]=seqValue;
    return seqValue;
  }
}

interface IMarketOddsFactory{
  function calcOdds(MarketDomain.MarketBetBo calldata MarketBetBo,MarketDomain.MarketBetOptionBo [] calldata options) pure external returns (bool exceed,uint256 currentOdds,MarketDomain.MarketBetOptionBo [] memory currOptions);
}

interface MarketSwapInterceptor{
  // function onSwapBefore(address user,uint256 poolId,uint256 poolType,uint256 option,uint256 swapAmount)external;
  function onSwapAfter(address user,uint256 poolId,uint256 poolType,uint256 option,uint256 swapAmount,uint256 odds)external;
}

contract ConfigCenter{

  struct InterceptorConfig{
    address contractAddress;
    bool valid;
  }

  mapping(uint256 =>address) private  marketOddsFactorys;
  InterceptorConfig [] private  marketSwapInterceptors;

  function _setOddsFactory(
    uint256 poolType,address factoryAddress)
    internal
  {
  require(poolType>0 && factoryAddress!=address(0),"ConfigCenter: poolType or factoryAddress can not be zero.");
  marketOddsFactorys[poolType]=factoryAddress;
  }

  function _oddsFactoryOf(uint256 poolType)
    view
    internal
    returns (address)
  {
  return marketOddsFactorys[poolType];
  }

  function _installSwapInterceptor(
    address marketSwapInterceptor)
    internal
  {
  require(marketSwapInterceptor!=address(0),"ConfigCenter: marketSwapInterceptor can not be zero.");
  bool exists;
  bool valid;
  uint256 index;
  (exists,valid ,index) = _find(marketSwapInterceptor);
  if(exists){
    marketSwapInterceptors[index].valid = true;
  }else{
    marketSwapInterceptors.push(InterceptorConfig({
      valid:true,
      contractAddress:marketSwapInterceptor
    }));
  } 
  }

  function _find(address _contractAddress)
  view internal
  returns (bool exists ,bool valid ,uint256 index)
  {
     if(marketSwapInterceptors.length==0){
       return (false,false,0);
     }
    for(uint256 i = 0; i < marketSwapInterceptors.length; i++){
      InterceptorConfig memory interceptor = marketSwapInterceptors[i];
      if(interceptor.contractAddress == _contractAddress){
        return (true,interceptor.valid,i);
      }
    }

  }

  function _unstallSwapInterceptor(
    address marketSwapInterceptor)
    internal
  {
  require(marketSwapInterceptor!=address(0),"ConfigCenter: marketSwapInterceptor can not be zero.");
  bool exists;
  bool valid;
  uint256 index;
  (exists,valid ,index) = _find(marketSwapInterceptor);
  if(exists){
    marketSwapInterceptors[index].valid = false;
  }
}

  function _findAllSwapInterceptor()
    view
    internal
    returns (InterceptorConfig [] memory )
  {
  return marketSwapInterceptors;
  }
}


contract  MarketDomain{

    struct MarketBetOptionEntity{
        uint256 option;
        uint256 currOdds;
        uint256 betTotalAmount;       
    }


    struct MarketPoolEntity{
      uint256 poolId;
      uint256 poolType;
      uint256 fixtureId;
      uint256 betMinAmount;
      uint256 betMaxAmount;
      uint256 fee;
      bool    betEnable;
      uint256 betBeginTime;
      uint256 betEndTime;
      uint256 createTime;
      uint256 updateTime;
  }

  struct MarketPoolAddDto{
      uint256 poolId;
      uint256 poolType;
      uint256 fixtureId;
      uint256 betMinAmount;
      uint256 betMaxAmount;
      uint256 fee;
      bool    betEnable;
      uint256 betBeginTime;
      uint256 betEndTime;
  }

  struct MarketPoolEditDto{
      uint256 poolId;
      uint256 fixtureId;
      uint256 betMinAmount;
      uint256 betMaxAmount;
      bool    betEnable;
      uint256 betBeginTime;
      uint256 betEndTime;
  }


  struct MarketBetEntity{
      uint256 betId;
      uint256 poolId;
      address userAddress;
      uint256 option;
      uint256 currOdds;
      uint256 betAmount;
      bool    drawed;
      uint256 drawTime;
      uint256 rewardAmout;
      uint256 refundAmount;
      uint256 createTime;
      uint256 updateTime;
  }

  struct MarketBetDto{
      uint256 poolId;
      uint256 option;
      uint256 betAmount;
      uint256 slide;
  }
  
  struct MarketBetBo{
    uint256 poolId;
    uint256 poolType;
    address user;
    uint256 option;
    uint256 betAmount;
    uint256 slide;
    uint256 fee;
    uint256 minUnit;
  }

  struct MarketBetOptionBo{
        uint256 option;
        uint256 currOdds;
        uint256 betTotalAmount;       
  }
}


contract MarketService is MarketDomain,Sequence,WalletService,ConfigCenter{
    string private betIdKey = "BETID";
    mapping(uint256=>MarketPoolEntity)  pools;
    mapping(uint256=>MarketBetOptionEntity [])  poolOptions;
    mapping(uint256=>MarketBetEntity)  bets;

    function _addMarketPoolEntity(
     MarketPoolAddDto memory _poolAddDto)
    internal
   {
     require(_poolAddDto.poolId>0,"MarketService: PoolId can not be zero.");
     MarketPoolEntity storage localPool = pools[_poolAddDto.poolId];
     require(localPool.poolId==0,"MarketService: Pool already exists.");
     localPool.poolId = _poolAddDto.poolId;
     localPool.poolType = _poolAddDto.poolType;
     localPool.fixtureId = _poolAddDto.fixtureId;
     localPool.betBeginTime = _poolAddDto.betBeginTime;
     localPool.fee = _poolAddDto.fee;
     localPool.betEndTime = _poolAddDto.betEndTime;
     localPool.betEnable = _poolAddDto.betEnable;
     localPool.betMinAmount = _poolAddDto.betMinAmount;
     localPool.betMaxAmount = _poolAddDto.betMaxAmount;
     localPool.createTime = block.timestamp;
     localPool.updateTime = block.timestamp;
    }

    function _editMarketPoolEntity(
     MarketPoolEditDto memory _poolEditDto)
    internal
   {
     require(_poolEditDto.poolId>0,"MarketService: PoolId can not be zero.");
     MarketPoolEntity storage localPool = pools[_poolEditDto.poolId];
     require(localPool.poolId>0,"MarketService: Pool not found!");
     if(_poolEditDto.fixtureId>0){
      localPool.fixtureId = _poolEditDto.fixtureId;
     }
     if(_poolEditDto.betBeginTime>0){
       localPool.betBeginTime = _poolEditDto.betBeginTime;
     }
     if(_poolEditDto.betEndTime>0){
       localPool.betEndTime = _poolEditDto.betEndTime;
     }
    if(_poolEditDto.betMinAmount>0){
       localPool.betMinAmount = _poolEditDto.betMinAmount;
     }
     if(_poolEditDto.betMaxAmount>0){
       localPool.betMaxAmount = _poolEditDto.betMaxAmount;
     }
     localPool.betEnable = _poolEditDto.betEnable;
     localPool.updateTime = block.timestamp;
    }


    function _addMarketOptionEntities(
      uint256 poolId,
      uint256 [] memory optionArr,
      uint256 [] memory initOddsArr,
      uint256 [] memory betTotalAmountArr
    )
    internal
   {
     require(poolId>0,"MarketService: PoolId can not be zero.");
     MarketPoolEntity storage localPool = pools[poolId];
     require(localPool.poolId>0,"MarketService: Pool not found.");
     MarketBetOptionEntity [] storage optionEntityArr = poolOptions[poolId];
     require(optionEntityArr.length==0,"MarketService: Pool option already exists.");
     require(optionArr.length==initOddsArr.length&&optionArr.length ==betTotalAmountArr.length ,"MarketService: optionArr length invalid.");    
     for(uint256 i =0; i<optionArr.length; i++){
       optionEntityArr.push(MarketBetOptionEntity({
       option:optionArr[i],
       currOdds:initOddsArr[i],
       betTotalAmount:betTotalAmountArr[i]
     }));
     }
    
    }

    function _findMarketPoolEntity(uint256 poolId) internal view returns(MarketPoolEntity memory poolEntity){
      poolEntity = pools[poolId];
    }

    function _findMarketPoolBetOptionEntity(uint256 _poolId,uint256 _option) internal view returns(MarketBetOptionEntity memory result){
      MarketBetOptionEntity [] memory  options =  poolOptions[_poolId];
      for(uint256 i =0; i< options.length; i++){
        MarketBetOptionEntity memory optionEntity = options[i];
        if(optionEntity.option == _option){
          result =  optionEntity;
          break;
        }
      }
    }

    function _findMarketPoolBetOptionEntitys(uint256 _poolId) internal view returns(MarketBetOptionEntity [] memory results){
      return  poolOptions[_poolId];
    }

 function _swap(
   MarketBetDto
   memory
   _marketBetDto
 ) internal returns(uint256 betId,uint256 finalOdds,uint256 createTime){
  
  MarketPoolEntity storage localPool = pools[_marketBetDto.poolId]; 
  require(localPool.poolId>0,"MarketService: Invalid Pool.");
  require(block.timestamp >=localPool.betBeginTime && block.timestamp <=localPool.betEndTime,"MarketService: Invalid bet time.");
  require(_marketBetDto.betAmount >=localPool.betMinAmount && _marketBetDto.betAmount <=localPool.betMaxAmount,"MarketService: Invalid bet amount.");


  MarketBetBo memory betBo = MarketBetBo({
    poolId:_marketBetDto.poolId,
    poolType:localPool.poolType,
    user:msg.sender,
    option:_marketBetDto.option,
    betAmount:_marketBetDto.betAmount,
    slide:_marketBetDto.slide,
    minUnit:localPool.betMinAmount,
    fee:localPool.fee
  });

   _payBetToken(betBo.betAmount);

  MarketBetOptionEntity  [] storage optionEntiries = poolOptions[_marketBetDto.poolId];
  MarketBetOptionBo [] memory optionBos = new MarketBetOptionBo [](optionEntiries.length);
  bool finded = false;
  for(uint256 i =0;i< optionEntiries.length;i ++){
    MarketBetOptionEntity storage localOption = optionEntiries[i];
    optionBos[i] = MarketBetOptionBo({
      option:localOption.option,
      currOdds:localOption.currOdds,
      betTotalAmount:localOption.betTotalAmount
    });
    if(localOption.option == _marketBetDto.option){
      finded = true;
    }
  }
  require(finded,"MarketService: Invalid option.");
   
  uint256 nowTime = block.timestamp;
  bool exceed;
  uint256 currentOdds;
  MarketBetOptionBo [] memory optionsRes;
  address oddsFactoryAddress = _oddsFactoryOf(localPool.poolType);
  require(oddsFactoryAddress!=address(0),"MarketService: oddsFactoryAddress not found!");
  (exceed,currentOdds,optionsRes) = IMarketOddsFactory(oddsFactoryAddress).calcOdds(betBo,optionBos);
  require(exceed == false,"MarketService: slide exceed.");
  betId = _increment(betIdKey);
  bets[betId] = MarketBetEntity({
     betId:betId,
     poolId:betBo.poolId,
     userAddress:msg.sender,
     option:betBo.option,
     currOdds:currentOdds,
     betAmount:betBo.betAmount,
     drawed:false,
     drawTime:0,
     rewardAmout:0,
     refundAmount:0,
     createTime:nowTime,
     updateTime:nowTime
   });

   _modifyOptionsOnBet(optionEntiries,optionsRes);
   createTime = nowTime;
   finalOdds = currentOdds;

  _onSwapAfter(betBo,currentOdds);
 }

 function _findBetEntity(uint256 betId)internal view returns(MarketBetEntity memory entity){
   return bets[betId];
 }

  function _onSwapAfter(MarketBetBo memory betbo,uint256 finalOdds)internal{
    InterceptorConfig [] memory marketSwapInterceptors = _findAllSwapInterceptor();
      if(marketSwapInterceptors.length >0){
        for(uint256 i = 0; i< marketSwapInterceptors.length; i++){
          InterceptorConfig memory interceptor = marketSwapInterceptors[i];
          if(interceptor.valid){
            MarketSwapInterceptor(interceptor.contractAddress).onSwapAfter(betbo.user,betbo.poolId,betbo.poolType,betbo.option,betbo.betAmount,finalOdds);
          }      
        }
      }
  }


  function _modifyOptionsOnBet(MarketBetOptionEntity  []  storage options,MarketBetOptionBo [] memory optionBos)internal{
    for(uint256 i = 0; i<options.length; i++){
    MarketBetOptionEntity storage _option = options[i];
    for(uint256 j = 0; j<optionBos.length; j++ ){
      MarketBetOptionBo memory res = optionBos[j];
      if(_option.option == res.option){
        _option.currOdds = res.currOdds;
        _option.betTotalAmount = res.betTotalAmount;
      }
    }
  }
 }
  


  function _draw(
   uint256 [] calldata  betIdArr,
   uint256 [] calldata  rewardArr,
   uint256 [] calldata  refundArr
 ) internal {   
   for(uint256 i = 0; i<betIdArr.length; i++){
     MarketBetEntity storage betEntity = bets[betIdArr[i]];
     if(!betEntity.drawed){
       betEntity.drawed=true;
       betEntity.drawTime = block.timestamp;
       betEntity.updateTime = block.timestamp;
       betEntity.rewardAmout = rewardArr[i];
       betEntity.refundAmount = refundArr[i];       
       uint256 payAmount = rewardArr[i] + refundArr[i];
       _balanceOperation(betEntity.userAddress,true,payAmount);
     }
   }
}

}

interface IOddsSwap{
  function getBetTokenAddress()external view returns (address);
  function setBetTokenAddress(address betTokenAddress)external;
  function getTokenPoolAddress()external view returns (address);
  function setTokenPoolAddress(address tokenPoolAddress)external;
  function getIfEth()external view returns (bool);
  function setIfEth(bool _ifEth)external;

  function setOddsFactory(uint256 poolType,address factoryAddress)external;
  function oddsFactoryOf(uint256 poolType) view external returns (address);
  function installSwapInterceptor(address marketSwapInterceptor)external;
  function unstallSwapInterceptor(address marketSwapInterceptor)external;
  function showAllSwapInterceptor() view external returns (address [] memory contractAddresses,bool [] memory valids);

  function findMarketPool(uint256 _poolId) external view returns(
      uint256 poolId,
      uint256 poolType,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      uint256 fee,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime,
      uint256 createTime,
      uint256 updateTime
  );

  function addMarketPool(
      uint256 poolId,
      uint256 poolType,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      uint256 fee,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime
  )external;

  function updateMarketPool(
      uint256 poolId,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime
  )external;

  function findMarketPoolBetOption(
      uint256 _poolId,
      uint256 _option
  )external returns(
      uint256 option,
      uint256 currOdds,
      uint256 betTotalAmount
  );

  function findMarketPoolBetAllOption(
      uint256 _poolId
  )external returns(
      uint256 [] memory optionArr,
      uint256 [] memory currOddsArr,
      uint256 [] memory betTotalAmountArr
  );


  function addMarketPoolBetOptions(
      uint256 poolId,
      uint256 [] memory optionArr,
      uint256 [] memory initOddsArr,
      uint256 [] memory betTotalAmountArr
  )external ;

  function draw(
      uint256 [] calldata  betIdArr,
      uint256 [] calldata  rewardArr,
      uint256 [] calldata  refundArr
  )external;
  
  function swap(
    uint256 poolId,
    uint256 option,
    uint256 betAmount,
    uint256 slide
    )external;

  function findBetInfo(uint256 _betId) external view returns(
      uint256 betId,
      uint256 poolId,
      address userAddress,
      uint256 option,
      uint256 currOdds,
      uint256 betAmount,
      bool    drawed,
      uint256 drawTime,
      uint256 rewardAmout,
      uint256 refundAmount,
      uint256 createTime,
      uint256 updateTime
  );
  function balanceOf(address user) external view returns(uint256);  
  function withdraw(uint256 amount) external returns(bool succeed);

  event SetBetTokenAddress(address betTokenAddress);
  event SetTokenPoolAddress(address tokenPoolAddress);
  event SetIfEth(bool ifEth);
  event SetOddsFactory(uint256 poolType,address factoryAddress);
  event InstallSwapInterceptor(address marketSwapInterceptor);
  event UnstallSwapInterceptor(address marketSwapInterceptor);
  event AddMarketPool(uint256 indexed poolId,uint256 poolType,uint256 fixtureId,uint256 betMinAmount,uint256 betMaxAmount,uint256 fee,bool betEnable,uint256 betBeginTime,uint256 betEndTime);
  event UpdateMarketPool(uint256 indexed poolId,uint256 fixtureId,uint256 betMinAmount,uint256 betMaxAmount,bool  betEnable,uint256 betBeginTime,uint256 betEndTime);
  event AddMarketBetOptions(uint256 indexed poolId,uint256 [] optionArr,uint256 [] initOddsArr,uint256 [] betTotalAmountArr);
  event Draw( uint256 []  betIdArr, uint256 []  rewardArr,   uint256 []  refundArr,uint256 time);
  event Swap(address indexed user,uint256 indexed poolId,uint256 betId,uint256 option,uint256 betAmount,uint256 slide,uint256 finalOdds,uint256 createTime);
  event Withdraw(address indexed user,uint256 amount,uint256 time);
}

contract OddsSwap is IOddsSwap,Ownable,MarketService{
  function getBetTokenAddress()external view override returns (address){
    return _getBetTokenAddress();
  }
  function setBetTokenAddress(address betTokenAddress)external override onlyOwner{
    _setBetTokenAddress(betTokenAddress);
    emit SetBetTokenAddress(betTokenAddress);
  }
  function getTokenPoolAddress()external view override returns (address){
    return _getTokenPoolAddress();
  }
  function setTokenPoolAddress(address tokenPoolAddress)external override onlyOwner{
    _setTokenPoolAddress(tokenPoolAddress);
    emit SetTokenPoolAddress(tokenPoolAddress);
  }

  function getIfEth()external view override returns (bool){
    return _getIfEth();
  }
  function setIfEth(bool _ifEth)external override onlyOwner{
    _setIfEth(_ifEth);
    emit SetIfEth(_ifEth);
  }

  function setOddsFactory(uint256 poolType,address factoryAddress)external override onlyOwner{
    _setOddsFactory(poolType,factoryAddress);
    emit SetOddsFactory(poolType,factoryAddress);
  }
  function oddsFactoryOf(uint256 poolType) view external override returns (address){
    return _oddsFactoryOf(poolType);
  }
  function installSwapInterceptor(address marketSwapInterceptor)external override onlyOwner{
    _installSwapInterceptor(marketSwapInterceptor);
    emit InstallSwapInterceptor(marketSwapInterceptor);
  }
  function unstallSwapInterceptor(address marketSwapInterceptor)external override onlyOwner{
    _unstallSwapInterceptor(marketSwapInterceptor);
    emit UnstallSwapInterceptor(marketSwapInterceptor);
  }
  function showAllSwapInterceptor() view external override returns (address [] memory contractAddresses,bool [] memory valids){
    ConfigCenter.InterceptorConfig [] memory all =  _findAllSwapInterceptor();
    contractAddresses = new address[](all.length);
    valids = new bool[](all.length);
    for(uint256 i = 0;i< all.length; i++){
      contractAddresses[i] = all[i].contractAddress;
      valids[i] = all[i].valid;
    }
  }

  function addMarketPool(
      uint256 poolId,
      uint256 poolType,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      uint256 fee,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime
  )external override onlyOwner{
    MarketPoolAddDto memory dto = _toMarketAddDto(poolId,poolType,fixtureId,betMinAmount,betMaxAmount,fee,betEnable,betBeginTime,betEndTime);
    _addMarketPoolEntity(dto);
   emit AddMarketPool(dto.poolId,dto.poolType,dto.fixtureId,dto.betMinAmount,dto.betMaxAmount,dto.fee,dto.betEnable,dto.betBeginTime,dto.betEndTime);
  }

  function _toMarketAddDto(
      uint256 poolId,
      uint256 poolType,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      uint256 fee,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime
  ) internal pure returns(MarketPoolAddDto memory dto){
      dto = MarketPoolAddDto({
      poolId:poolId,
      poolType:poolType,
      fixtureId:fixtureId,
      betMinAmount:betMinAmount,
      betMaxAmount:betMaxAmount,
      fee:fee,
      betEnable:betEnable,
      betBeginTime:betBeginTime,
      betEndTime:betEndTime
    });
  }


  function addMarketPoolBetOptions(
      uint256 poolId,
      uint256 [] memory optionArr,
      uint256 [] memory initOddsArr,
      uint256 [] memory betTotalAmountArr
  )external override onlyOwner{
    _addMarketOptionEntities(poolId,optionArr,initOddsArr,betTotalAmountArr);
    emit AddMarketBetOptions(poolId,optionArr,initOddsArr,betTotalAmountArr);
  }


  function _toMarketBetDto(
    uint256 poolId,
    uint256 option,
    uint256 betAmount,
    uint256 slide
  )internal pure returns (MarketBetDto memory betDto){
    betDto = MarketBetDto({
      poolId:poolId,
      option:option,
      betAmount:betAmount,
      slide:slide
    });
  }

  function _toPoolEditDto(
      uint256 poolId,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime
  )internal pure returns (MarketPoolEditDto memory poolEditDto){
    poolEditDto = MarketPoolEditDto({
      poolId:poolId,
      fixtureId:fixtureId,
      betMinAmount:betMinAmount,
      betMaxAmount:betMaxAmount,
      betEnable:betEnable,
      betBeginTime:betBeginTime,
      betEndTime:betEndTime
    });
  }

  function updateMarketPool(
      uint256 poolId,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime
    )external override onlyOwner{
      MarketPoolEditDto memory poolEditDto = _toPoolEditDto(poolId,fixtureId,betMinAmount,betMaxAmount,betEnable,betBeginTime,betEndTime);
    _editMarketPoolEntity(poolEditDto);
    emit UpdateMarketPool(poolId,fixtureId,betMinAmount,betMaxAmount,betEnable,betBeginTime,betEndTime);
  }

  function findMarketPool(uint256 _poolId) external override view returns(
      uint256 poolId,
      uint256 poolType,
      uint256 fixtureId,
      uint256 betMinAmount,
      uint256 betMaxAmount,
      uint256 fee,
      bool    betEnable,
      uint256 betBeginTime,
      uint256 betEndTime,
      uint256 createTime,
      uint256 updateTime){
    MarketPoolEntity memory pool = _findMarketPoolEntity(_poolId);
    return (pool.poolId,pool.poolType,pool.fixtureId,pool.betMinAmount,pool.betMaxAmount,pool.fee,pool.betEnable,pool.betBeginTime,pool.betEndTime,pool.createTime,pool.updateTime);
  }

  function findMarketPoolBetOption(
      uint256 _poolId,
      uint256 _option
  )external override view returns(
      uint256 option,
      uint256 currOdds,
      uint256 betTotalAmount
  ){
      MarketBetOptionEntity memory optionEntity = _findMarketPoolBetOptionEntity(_poolId,_option);
      return (optionEntity.option,optionEntity.currOdds,optionEntity.betTotalAmount);
  }


  function findMarketPoolBetAllOption(
      uint256 _poolId
  )external override view returns(
      uint256 [] memory optionArr,
      uint256 [] memory currOddsArr,
      uint256 [] memory betTotalAmountArr
  ){
      MarketBetOptionEntity [] memory options = _findMarketPoolBetOptionEntitys(_poolId);
      optionArr = new uint256[](options.length);
      currOddsArr = new uint256[](options.length);
      betTotalAmountArr = new uint256[](options.length);
      for(uint256 i =0;i<options.length;i++){
        optionArr[i] = options[i].option;
        currOddsArr[i] = options[i].currOdds;
        betTotalAmountArr[i] = options[i].betTotalAmount;
      }
  }


  function draw(
      uint256 [] calldata  betIdArr,
      uint256 [] calldata  rewardArr,
      uint256 [] calldata  refundArr
    )external override onlyOwner{
    _draw(betIdArr,rewardArr,refundArr);
    emit Draw(betIdArr,rewardArr,refundArr,block.timestamp);
  }

  function swap(
    uint256 poolId,
    uint256 option,
    uint256 betAmount,
    uint256 slide
    )external nonReentrant override{
    MarketBetDto memory marketBetDto = _toMarketBetDto(poolId,option,betAmount,slide);
    uint256 betId;
    uint256 finalOdds;
    uint256 createTime;
    (betId,finalOdds,createTime) = _swap(marketBetDto);
    emit Swap(msg.sender,marketBetDto.poolId,betId,marketBetDto.option,marketBetDto.betAmount,marketBetDto.slide,finalOdds,createTime);
  }

  function findBetInfo(uint256 _betId) external view override returns(
      uint256 betId,
      uint256 poolId,
      address userAddress,
      uint256 option,
      uint256 currOdds,
      uint256 betAmount,
      bool    drawed,
      uint256 drawTime,
      uint256 rewardAmout,
      uint256 refundAmount,
      uint256 createTime,
      uint256 updateTime
  ){
    MarketBetEntity memory bet = _findBetEntity(_betId);
    return (bet.betId,bet.poolId,bet.userAddress,bet.option,bet.currOdds,bet.betAmount,bet.drawed,bet.drawTime,bet.rewardAmout,bet.refundAmount,bet.createTime,bet.updateTime);
  }

  function balanceOf(address user) external view override returns(uint256) {
    return _balanceOf(user);
  }
  function withdraw(uint256 amount) external nonReentrant override returns(bool succeed){
    _withdraw(amount);
    succeed =  true;
    emit Withdraw(msg.sender,amount,block.timestamp);
  }

  constructor(address betTokenAddress,address tokenPoolAddress){
    _setBetTokenAddress(betTokenAddress);
    _setTokenPoolAddress(tokenPoolAddress);
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"betTokenAddress","type":"address"},{"internalType":"address","name":"tokenPoolAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"optionArr","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"initOddsArr","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"betTotalAmountArr","type":"uint256[]"}],"name":"AddMarketBetOptions","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolType","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fixtureId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betMaxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"betEnable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"betBeginTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betEndTime","type":"uint256"}],"name":"AddMarketPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"betIdArr","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"rewardArr","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"refundArr","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Draw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketSwapInterceptor","type":"address"}],"name":"InstallSwapInterceptor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"betTokenAddress","type":"address"}],"name":"SetBetTokenAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"ifEth","type":"bool"}],"name":"SetIfEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolType","type":"uint256"},{"indexed":false,"internalType":"address","name":"factoryAddress","type":"address"}],"name":"SetOddsFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenPoolAddress","type":"address"}],"name":"SetTokenPoolAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"option","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slide","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"finalOdds","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"createTime","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketSwapInterceptor","type":"address"}],"name":"UnstallSwapInterceptor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fixtureId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betMaxAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"betEnable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"betBeginTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betEndTime","type":"uint256"}],"name":"UpdateMarketPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"poolType","type":"uint256"},{"internalType":"uint256","name":"fixtureId","type":"uint256"},{"internalType":"uint256","name":"betMinAmount","type":"uint256"},{"internalType":"uint256","name":"betMaxAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bool","name":"betEnable","type":"bool"},{"internalType":"uint256","name":"betBeginTime","type":"uint256"},{"internalType":"uint256","name":"betEndTime","type":"uint256"}],"name":"addMarketPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256[]","name":"optionArr","type":"uint256[]"},{"internalType":"uint256[]","name":"initOddsArr","type":"uint256[]"},{"internalType":"uint256[]","name":"betTotalAmountArr","type":"uint256[]"}],"name":"addMarketPoolBetOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"betIdArr","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardArr","type":"uint256[]"},{"internalType":"uint256[]","name":"refundArr","type":"uint256[]"}],"name":"draw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_betId","type":"uint256"}],"name":"findBetInfo","outputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"option","type":"uint256"},{"internalType":"uint256","name":"currOdds","type":"uint256"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"bool","name":"drawed","type":"bool"},{"internalType":"uint256","name":"drawTime","type":"uint256"},{"internalType":"uint256","name":"rewardAmout","type":"uint256"},{"internalType":"uint256","name":"refundAmount","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"updateTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"findMarketPool","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"poolType","type":"uint256"},{"internalType":"uint256","name":"fixtureId","type":"uint256"},{"internalType":"uint256","name":"betMinAmount","type":"uint256"},{"internalType":"uint256","name":"betMaxAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bool","name":"betEnable","type":"bool"},{"internalType":"uint256","name":"betBeginTime","type":"uint256"},{"internalType":"uint256","name":"betEndTime","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"updateTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"findMarketPoolBetAllOption","outputs":[{"internalType":"uint256[]","name":"optionArr","type":"uint256[]"},{"internalType":"uint256[]","name":"currOddsArr","type":"uint256[]"},{"internalType":"uint256[]","name":"betTotalAmountArr","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_option","type":"uint256"}],"name":"findMarketPoolBetOption","outputs":[{"internalType":"uint256","name":"option","type":"uint256"},{"internalType":"uint256","name":"currOdds","type":"uint256"},{"internalType":"uint256","name":"betTotalAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBetTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIfEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"marketSwapInterceptor","type":"address"}],"name":"installSwapInterceptor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolType","type":"uint256"}],"name":"oddsFactoryOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"betTokenAddress","type":"address"}],"name":"setBetTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_ifEth","type":"bool"}],"name":"setIfEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolType","type":"uint256"},{"internalType":"address","name":"factoryAddress","type":"address"}],"name":"setOddsFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenPoolAddress","type":"address"}],"name":"setTokenPoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showAllSwapInterceptor","outputs":[{"internalType":"address[]","name":"contractAddresses","type":"address[]"},{"internalType":"bool[]","name":"valids","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"option","type":"uint256"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint256","name":"slide","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketSwapInterceptor","type":"address"}],"name":"unstallSwapInterceptor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"fixtureId","type":"uint256"},{"internalType":"uint256","name":"betMinAmount","type":"uint256"},{"internalType":"uint256","name":"betMaxAmount","type":"uint256"},{"internalType":"bool","name":"betEnable","type":"bool"},{"internalType":"uint256","name":"betBeginTime","type":"uint256"},{"internalType":"uint256","name":"betEndTime","type":"uint256"}],"name":"updateMarketPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"succeed","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

0x60806040526040518060400160405280600581526020017f4245544944000000000000000000000000000000000000000000000000000000815250600890816200004a91906200054f565b503480156200005857600080fd5b506040516200646f3803806200646f83398181016040528101906200007e9190620006a0565b60016000819055506000620000986200016160201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000148826200016960201b60201c565b62000159816200021f60201b60201c565b505062000790565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d2906200076e565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000288906200076e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035757607f821691505b6020821081036200036d576200036c6200030f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000398565b620003e3868362000398565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004306200042a6200042484620003fb565b62000405565b620003fb565b9050919050565b6000819050919050565b6200044c836200040f565b620004646200045b8262000437565b848454620003a5565b825550505050565b600090565b6200047b6200046c565b6200048881848462000441565b505050565b5b81811015620004b057620004a460008262000471565b6001810190506200048e565b5050565b601f821115620004ff57620004c98162000373565b620004d48462000388565b81016020851015620004e4578190505b620004fc620004f38562000388565b8301826200048d565b50505b505050565b600082821c905092915050565b6000620005246000198460080262000504565b1980831691505092915050565b60006200053f838362000511565b9150826002028217905092915050565b6200055a82620002d5565b67ffffffffffffffff811115620005765762000575620002e0565b5b6200058282546200033e565b6200058f828285620004b4565b600060209050601f831160018114620005c75760008415620005b2578287015190505b620005be858262000531565b8655506200062e565b601f198416620005d78662000373565b60005b828110156200060157848901518255600182019150602085019450602081019050620005da565b868310156200062157848901516200061d601f89168262000511565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000668826200063b565b9050919050565b6200067a816200065b565b81146200068657600080fd5b50565b6000815190506200069a816200066f565b92915050565b60008060408385031215620006ba57620006b962000636565b5b6000620006ca8582860162000689565b9250506020620006dd8582860162000689565b9150509250929050565b600082825260208201905092915050565b7f57616c6c65745061796d656e743a416464726573732063616e206e6f7420626560008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b600062000756602683620006e7565b91506200076382620006f8565b604082019050919050565b60006020820190508181036000830152620007898162000747565b9050919050565b615ccf80620007a06000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80637d59721e116100de578063b3d0581711610097578063e08e802a11610071578063e08e802a1461045f578063f0200dcc1461047e578063f03cb74b1461049a578063f2fde38b146104b657610173565b8063b3d05817146103c1578063d066b0b4146103f3578063dfa703c71461042d57610173565b80637d59721e1461030157806388b6c5c21461031d5780638da5cb5b1461033b57806393150e7a146103595780639776d6fd14610375578063ac2fadb0146103a557610173565b8063505b4b8a11610130578063505b4b8a146102385780635673b02d1461025457806366e5804a146102705780636c60ac02146102ab57806370a08231146102c7578063715018a6146102f757610173565b806305723e81146101785780630705e9b814610194578063198bbb67146101b057806321cf2e2b146101cc5780632e1a7d4d146101ea5780632f35746d1461021a575b600080fd5b610192600480360381019061018d9190613ba0565b6104d2565b005b6101ae60048036038101906101a99190613be0565b610595565b005b6101ca60048036038101906101c59190613c45565b610654565b005b6101d4610738565b6040516101e19190613cf6565b60405180910390f35b61020460048036038101906101ff9190613d11565b610747565b6040516102119190613d4d565b60405180910390f35b6102226107bb565b60405161022f9190613d4d565b60405180910390f35b610252600480360381019061024d9190613be0565b6107ca565b005b61026e60048036038101906102699190613d68565b610889565b005b61028a60048036038101906102859190613d11565b610936565b6040516102a29c9b9a99989796959493929190613dde565b60405180910390f35b6102c560048036038101906102c09190613efd565b6109bd565b005b6102e160048036038101906102dc9190613be0565b610a92565b6040516102ee9190613fb1565b60405180910390f35b6102ff610aa4565b005b61031b60048036038101906103169190613be0565b610be1565b005b610325610ca0565b6040516103329190613cf6565b60405180910390f35b610343610caf565b6040516103509190613cf6565b60405180910390f35b610373600480360381019061036e9190613fcc565b610cd9565b005b61038f600480360381019061038a9190613d11565b610dea565b60405161039c9190613cf6565b60405180910390f35b6103bf60048036038101906103ba91906141e5565b610dfc565b005b6103db60048036038101906103d69190613d11565b610ec6565b6040516103ea9392919061435e565b60405180910390f35b61040d60048036038101906104089190613d11565b61109e565b6040516104249b9a999897969594939291906143aa565b60405180910390f35b61044760048036038101906104429190614455565b61111b565b60405161045693929190614495565b60405180910390f35b61046761114a565b604051610475929190614648565b60405180910390f35b6104986004803603810190610493919061467f565b6112c6565b005b6104b460048036038101906104af9190613be0565b611385565b005b6104d060048036038101906104cb9190613be0565b611444565b005b6104da6115ef565b73ffffffffffffffffffffffffffffffffffffffff166104f8610caf565b73ffffffffffffffffffffffffffffffffffffffff161461054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054590614709565b60405180910390fd5b61055882826115f7565b7f4d731f01ca6182ac3ce55414dbf228a3c70f6f6ede92037cab0178c4709cdba48282604051610589929190614729565b60405180910390a15050565b61059d6115ef565b73ffffffffffffffffffffffffffffffffffffffff166105bb610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890614709565b60405180910390fd5b61061a816116c9565b7fcc0ec7a4bd086aa6e930f2d2159e661a6cfab1c680ea07034498b3fb4c8ef3b0816040516106499190613cf6565b60405180910390a150565b61065c6115ef565b73ffffffffffffffffffffffffffffffffffffffff1661067a610caf565b73ffffffffffffffffffffffffffffffffffffffff16146106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c790614709565b60405180910390fd5b60006106e18888888888888861185c565b90506106ec816118a6565b877f4a6001d0f96413195d340faa77266bafcdae972acb7ff87988d53dd6b1f7e89688888888888860405161072696959493929190614752565b60405180910390a25050505050505050565b6000610742611a03565b905090565b6000610751611a2d565b61075a82611a7c565b600190503373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56883426040516107a69291906147b3565b60405180910390a26107b6611b2a565b919050565b60006107c5611b34565b905090565b6107d26115ef565b73ffffffffffffffffffffffffffffffffffffffff166107f0610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083d90614709565b60405180910390fd5b61084f81611b4b565b7f6362eee3edd630c6ba7c17f2ce5fff5afa5ebc3c0eda60299832180e6c230bc18160405161087e9190613cf6565b60405180910390a150565b610891611a2d565b600061089f85858585611bfe565b905060008060006108af84611c31565b80935081945082955050505083600001513373ffffffffffffffffffffffffffffffffffffffff167f4da0018238b97e3c8db4b8b995e62d5ef757c7ca7c0cfba42a64d4ec9957623185876020015188604001518960600151888860405161091c969594939291906147dc565b60405180910390a350505050610930611b2a565b50505050565b60008060008060008060008060008060008060006109538e6122a1565b9050806000015181602001518260400151836060015184608001518560a001518660c001518760e001518861010001518961012001518a61014001518b61016001519c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b6109c56115ef565b73ffffffffffffffffffffffffffffffffffffffff166109e3610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090614709565b60405180910390fd5b610a478686868686866123a4565b7f4c1dba327108448f42ded7d8aa3092213bb2da155245a2ad45e87353a4b3e1b286868686868642604051610a8297969594939291906148a7565b60405180910390a1505050505050565b6000610a9d826124fd565b9050919050565b610aac6115ef565b73ffffffffffffffffffffffffffffffffffffffff16610aca610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790614709565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610be96115ef565b73ffffffffffffffffffffffffffffffffffffffff16610c07610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614709565b60405180910390fd5b610c6681612549565b7f2e7e455b574b2b33817d343dbb96718bc105b981534481c3a282d1d05a16395881604051610c959190613cf6565b60405180910390a150565b6000610caa612619565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ce16115ef565b73ffffffffffffffffffffffffffffffffffffffff16610cff610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90614709565b60405180910390fd5b6000610d688a8a8a8a8a8a8a8a8a612643565b9050610d738161269c565b80600001517f9221fe49f6b02d022d99300ea7bfc10a640561003a3eaeecc40a2d23998454b882602001518360400151846060015185608001518660a001518760c001518860e00151896101000151604051610dd6989796959493929190614907565b60405180910390a250505050505050505050565b6000610df5826127e4565b9050919050565b610e046115ef565b73ffffffffffffffffffffffffffffffffffffffff16610e22610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90614709565b60405180910390fd5b610e8484848484612821565b837f663809696f88621ea9ed9be6f1ea5c2af720e0b9c08fcc1d00e31dd8ebbf6ec2848484604051610eb89392919061435e565b60405180910390a250505050565b60608060606000610ed685612a4c565b9050805167ffffffffffffffff811115610ef357610ef26140a7565b5b604051908082528060200260200182016040528015610f215781602001602082028036833780820191505090505b509350805167ffffffffffffffff811115610f3f57610f3e6140a7565b5b604051908082528060200260200182016040528015610f6d5781602001602082028036833780820191505090505b509250805167ffffffffffffffff811115610f8b57610f8a6140a7565b5b604051908082528060200260200182016040528015610fb95781602001602082028036833780820191505090505b50915060005b815181101561109557818181518110610fdb57610fda614985565b5b602002602001015160000151858281518110610ffa57610ff9614985565b5b60200260200101818152505081818151811061101957611018614985565b5b60200260200101516020015184828151811061103857611037614985565b5b60200260200101818152505081818151811061105757611056614985565b5b60200260200101516040015183828151811061107657611075614985565b5b602002602001018181525050808061108d906149e3565b915050610fbf565b50509193909250565b6000806000806000806000806000806000806110b98d612adc565b9050806000015181602001518260400151836060015184608001518560a001518660c001518760e001518861010001518961012001518a61014001519b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b60008060008061112b8686612b89565b9050806000015181602001518260400151935093509350509250925092565b6060806000611157612c77565b9050805167ffffffffffffffff811115611174576111736140a7565b5b6040519080825280602002602001820160405280156111a25781602001602082028036833780820191505090505b509250805167ffffffffffffffff8111156111c0576111bf6140a7565b5b6040519080825280602002602001820160405280156111ee5781602001602082028036833780820191505090505b50915060005b81518110156112c0578181815181106112105761120f614985565b5b60200260200101516000015184828151811061122f5761122e614985565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081818151811061127c5761127b614985565b5b60200260200101516020015183828151811061129b5761129a614985565b5b60200260200101901515908115158152505080806112b8906149e3565b9150506111f4565b50509091565b6112ce6115ef565b73ffffffffffffffffffffffffffffffffffffffff166112ec610caf565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990614709565b60405180910390fd5b61134b81612d43565b7ff4a33ad1dba9b2f83a9958f7acb87017a1b2d1079a5bf00976eb334826a93e988160405161137a9190613d4d565b60405180910390a150565b61138d6115ef565b73ffffffffffffffffffffffffffffffffffffffff166113ab610caf565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890614709565b60405180910390fd5b61140a81612d60565b7f7105ce0d7a9eedb17c88d0aaabec0cb89bd3fab658b384213978acd3ccbea8f3816040516114399190613cf6565b60405180910390a150565b61144c6115ef565b73ffffffffffffffffffffffffffffffffffffffff1661146a610caf565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790614709565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690614a9d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000821180156116345750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90614b2f565b60405180910390fd5b806006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90614bc1565b60405180910390fd5b600080600061174684612e13565b80935081945082955050505082156117975760016007828154811061176e5761176d614985565b5b9060005260206000200160000160146101000a81548160ff021916908315150217905550611856565b600760405180604001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001600115158152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555050505b50505050565b61186461392c565b6040518060e001604052808981526020018881526020018781526020018681526020018515158152602001848152602001838152509050979650505050505050565b60008160000151116118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490614c53565b60405180910390fd5b600060096000836000015181526020019081526020016000209050600081600001541161194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194690614cbf565b60405180910390fd5b60008260200151111561196a57816020015181600201819055505b60008260a001511115611985578160a0015181600701819055505b60008260c0015111156119a0578160c0015181600801819055505b6000826040015111156119bb57816040015181600301819055505b6000826060015111156119d657816060015181600401819055505b81608001518160060160006101000a81548160ff0219169083151502179055504281600a01819055505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260005403611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990614d2b565b60405180910390fd5b6002600081905550565b6000611a87336124fd565b905060008211611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614dbd565b60405180910390fd5b81811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614e4f565b60405180910390fd5b611b1b33600084612f4b565b50611b26338361313e565b5050565b6001600081905550565b6000600560149054906101000a900460ff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614ee1565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c0661396b565b6040518060800160405280868152602001858152602001848152602001838152509050949350505050565b600080600080600960008660000151815260200190815260200160002090506000816000015411611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90614f4d565b60405180910390fd5b80600701544210158015611caf575080600801544211155b611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614fb9565b60405180910390fd5b8060030154856040015110158015611d0e57508060040154856040015111155b611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d449061504b565b60405180910390fd5b600060405180610100016040528087600001518152602001836001015481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018760200151815260200187604001518152602001876060015181526020018360050154815260200183600301548152509050611dca8160800151613479565b6000600a60008860000151815260200190815260200160002090506000818054905067ffffffffffffffff811115611e0557611e046140a7565b5b604051908082528060200260200182016040528015611e3e57816020015b611e2b613993565b815260200190600190039081611e235790505b5090506000805b8380549050811015611ee3576000848281548110611e6657611e65614985565b5b90600052602060002090600302019050604051806060016040528082600001548152602001826001015481526020018260020154815250848381518110611eb057611eaf614985565b5b60200260200101819052508a60200151816000015403611ecf57600192505b508080611edb906149e3565b915050611e45565b5080611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906150b7565b60405180910390fd5b600042905060008060606000611f3d8a600101546127e4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590615149565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166329e3188f8a896040518363ffffffff1660e01b8152600401611fe99291906152fc565b600060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061202f9190615484565b8094508195508296505050506000151584151514612082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120799061553f565b60405180910390fd5b612115600880546120929061558e565b80601f01602080910402602001604051908101604052809291908181526020018280546120be9061558e565b801561210b5780601f106120e05761010080835404028352916020019161210b565b820191906000526020600020905b8154815290600101906020018083116120ee57829003601f168201915b5050505050613722565b9c506040518061018001604052808e81526020018a6000015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018a6060015181526020018481526020018a60800151815260200160001515815260200160008152602001600081526020016000815260200186815260200186815250600b60008f8152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b01559050506122808883613781565b849a50829b506122908984613838565b505050505050505050509193909250565b6122a96139b4565b600b60008381526020019081526020016000206040518061018001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b820154815250509050919050565b60005b868690508110156124f4576000600b60008989858181106123cb576123ca614985565b5b90506020020135815260200190815260200160002090508060060160009054906101000a900460ff166124e05760018160060160006101000a81548160ff0219169083151502179055504281600701819055504281600b018190555085858381811061243a57612439614985565b5b90506020020135816008018190555083838381811061245c5761245b614985565b5b90506020020135816009018190555060008484848181106124805761247f614985565b5b9050602002013587878581811061249a57612499614985565b5b905060200201356124ab91906155bf565b90506124dd8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600183612f4b565b50505b5080806124ec906149e3565b9150506123a7565b50505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af90614bc1565b60405180910390fd5b60008060006125c684612e13565b8093508194508295505050508215612613576000600782815481106125ee576125ed614985565b5b9060005260206000200160000160146101000a81548160ff0219169083151502179055505b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61264b613a2d565b6040518061012001604052808b81526020018a815260200189815260200188815260200187815260200186815260200185151581526020018481526020018381525090509998505050505050505050565b60008160000151116126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90614c53565b60405180910390fd5b6000600960008360000151815260200190815260200160002090506000816000015414612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90615665565b60405180910390fd5b8160000151816000018190555081602001518160010181905550816040015181600201819055508160e0015181600701819055508160a00151816005018190555081610100015181600801819055508160c001518160060160006101000a81548160ff02191690831515021790555081606001518160030181905550816080015181600401819055504281600901819055504281600a01819055505050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008411612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614c53565b60405180910390fd5b600060096000868152602001908152602001600020905060008160000154116128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b9906156d1565b60405180910390fd5b6000600a600087815260200190815260200160002090506000818054905014612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790615763565b60405180910390fd5b83518551148015612932575082518551145b612971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612968906157f5565b60405180910390fd5b60005b8551811015612a435781604051806060016040528088848151811061299c5761299b614985565b5b602002602001015181526020018784815181106129bc576129bb614985565b5b602002602001015181526020018684815181106129dc576129db614985565b5b6020026020010151815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000155602082015181600101556040820151816002015550508080612a3b906149e3565b915050612974565b50505050505050565b6060600a6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015612ad15783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190612a81565b505050509050919050565b612ae4613a7b565b60096000838152602001908152602001600020604051806101600160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152602001600a820154815250509050919050565b612b91613ad7565b6000600a6000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015612c165783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190612bc6565b50505050905060005b8151811015612c6f576000828281518110612c3d57612c3c614985565b5b6020026020010151905084816000015103612c5b5780935050612c6f565b508080612c67906149e3565b915050612c1f565b505092915050565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015612d3a578382906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16151515158152505081526020019060010190612c9b565b50505050905090565b80600560146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614ee1565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060078054905003612e34576000806000925092509250612f44565b60005b600780549050811015612f4257600060078281548110612e5a57612e59614985565b5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16151515158152505090508573ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603612f2e5760018160200151839450945094505050612f44565b508080612f3a906149e3565b915050612e37565b505b9193909250565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb290615887565b60405180910390fd5b60008211612ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff590615919565b60405180910390fd5b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154036130ad57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081600101819055504281600201819055504281600301819055505b83156130ca578281600101546130c391906155bf565b9150613124565b8281600101541015613111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613108906159ab565b60405180910390fd5b82816001015461312191906159cb565b91505b818160010181905550428160030181905550509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a490614ee1565b60405180910390fd5b600081116131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e790615a71565b60405180910390fd5b600560149054906101000a900460ff16156133c15780600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401613285929190615a91565b6020604051808303816000875af11580156132a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c89190615aba565b1015613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330090615b59565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff1660e01b815260040161338a93929190615b79565b600060405180830381600087803b1580156133a457600080fd5b505af11580156133b8573d6000803e3d6000fd5b50505050613475565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff1660e01b815260040161344293929190615b79565b600060405180830381600087803b15801561345c57600080fd5b505af1158015613470573d6000803e3d6000fd5b505050505b5050565b600081116134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b390615a71565b60405180910390fd5b600560149054906101000a900460ff161561366b5780600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161352f929190615a91565b6020604051808303816000875af115801561354e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135729190615aba565b10156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90615b59565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161363493929190615b79565b600060405180830381600087803b15801561364e57600080fd5b505af1158015613662573d6000803e3d6000fd5b5050505061371f565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016136ec93929190615b79565b600060405180830381600087803b15801561370657600080fd5b505af115801561371a573d6000803e3d6000fd5b505050505b50565b6000806002836040516137359190615c21565b908152602001604051809103902054905060018161375391906155bf565b9050806002846040516137669190615c21565b90815260200160405180910390208190555080915050919050565b60005b82805490508110156138335760008382815481106137a5576137a4614985565b5b9060005260206000209060030201905060005b835181101561381e5760008482815181106137d6576137d5614985565b5b60200260200101519050806000015183600001540361380a5780602001518360010181905550806040015183600201819055505b508080613816906149e3565b9150506137b8565b5050808061382b906149e3565b915050613784565b505050565b6000613842612c77565b90506000815111156139275760005b815181101561392557600082828151811061386f5761386e614985565b5b6020026020010151905080602001511561391157806000015173ffffffffffffffffffffffffffffffffffffffff1663c7672e1586604001518760000151886020015189606001518a608001518a6040518763ffffffff1660e01b81526004016138de96959493929190615c38565b600060405180830381600087803b1580156138f857600080fd5b505af115801561390c573d6000803e3d6000fd5b505050505b50808061391d906149e3565b915050613851565b505b505050565b6040518060e001604052806000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6040518061018001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b604051806101600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613b1f81613b0c565b8114613b2a57600080fd5b50565b600081359050613b3c81613b16565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6d82613b42565b9050919050565b613b7d81613b62565b8114613b8857600080fd5b50565b600081359050613b9a81613b74565b92915050565b60008060408385031215613bb757613bb6613b02565b5b6000613bc585828601613b2d565b9250506020613bd685828601613b8b565b9150509250929050565b600060208284031215613bf657613bf5613b02565b5b6000613c0484828501613b8b565b91505092915050565b60008115159050919050565b613c2281613c0d565b8114613c2d57600080fd5b50565b600081359050613c3f81613c19565b92915050565b600080600080600080600060e0888a031215613c6457613c63613b02565b5b6000613c728a828b01613b2d565b9750506020613c838a828b01613b2d565b9650506040613c948a828b01613b2d565b9550506060613ca58a828b01613b2d565b9450506080613cb68a828b01613c30565b93505060a0613cc78a828b01613b2d565b92505060c0613cd88a828b01613b2d565b91505092959891949750929550565b613cf081613b62565b82525050565b6000602082019050613d0b6000830184613ce7565b92915050565b600060208284031215613d2757613d26613b02565b5b6000613d3584828501613b2d565b91505092915050565b613d4781613c0d565b82525050565b6000602082019050613d626000830184613d3e565b92915050565b60008060008060808587031215613d8257613d81613b02565b5b6000613d9087828801613b2d565b9450506020613da187828801613b2d565b9350506040613db287828801613b2d565b9250506060613dc387828801613b2d565b91505092959194509250565b613dd881613b0c565b82525050565b600061018082019050613df4600083018f613dcf565b613e01602083018e613dcf565b613e0e604083018d613ce7565b613e1b606083018c613dcf565b613e28608083018b613dcf565b613e3560a083018a613dcf565b613e4260c0830189613d3e565b613e4f60e0830188613dcf565b613e5d610100830187613dcf565b613e6b610120830186613dcf565b613e79610140830185613dcf565b613e87610160830184613dcf565b9d9c50505050505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ebd57613ebc613e98565b5b8235905067ffffffffffffffff811115613eda57613ed9613e9d565b5b602083019150836020820283011115613ef657613ef5613ea2565b5b9250929050565b60008060008060008060608789031215613f1a57613f19613b02565b5b600087013567ffffffffffffffff811115613f3857613f37613b07565b5b613f4489828a01613ea7565b9650965050602087013567ffffffffffffffff811115613f6757613f66613b07565b5b613f7389828a01613ea7565b9450945050604087013567ffffffffffffffff811115613f9657613f95613b07565b5b613fa289828a01613ea7565b92509250509295509295509295565b6000602082019050613fc66000830184613dcf565b92915050565b60008060008060008060008060006101208a8c031215613fef57613fee613b02565b5b6000613ffd8c828d01613b2d565b995050602061400e8c828d01613b2d565b985050604061401f8c828d01613b2d565b97505060606140308c828d01613b2d565b96505060806140418c828d01613b2d565b95505060a06140528c828d01613b2d565b94505060c06140638c828d01613c30565b93505060e06140748c828d01613b2d565b9250506101006140868c828d01613b2d565b9150509295985092959850929598565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140df82614096565b810181811067ffffffffffffffff821117156140fe576140fd6140a7565b5b80604052505050565b6000614111613af8565b905061411d82826140d6565b919050565b600067ffffffffffffffff82111561413d5761413c6140a7565b5b602082029050602081019050919050565b600061416161415c84614122565b614107565b9050808382526020820190506020840283018581111561418457614183613ea2565b5b835b818110156141ad57806141998882613b2d565b845260208401935050602081019050614186565b5050509392505050565b600082601f8301126141cc576141cb613e98565b5b81356141dc84826020860161414e565b91505092915050565b600080600080608085870312156141ff576141fe613b02565b5b600061420d87828801613b2d565b945050602085013567ffffffffffffffff81111561422e5761422d613b07565b5b61423a878288016141b7565b935050604085013567ffffffffffffffff81111561425b5761425a613b07565b5b614267878288016141b7565b925050606085013567ffffffffffffffff81111561428857614287613b07565b5b614294878288016141b7565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142d581613b0c565b82525050565b60006142e783836142cc565b60208301905092915050565b6000602082019050919050565b600061430b826142a0565b61431581856142ab565b9350614320836142bc565b8060005b8381101561435157815161433888826142db565b9750614343836142f3565b925050600181019050614324565b5085935050505092915050565b600060608201905081810360008301526143788186614300565b9050818103602083015261438c8185614300565b905081810360408301526143a08184614300565b9050949350505050565b6000610160820190506143c0600083018e613dcf565b6143cd602083018d613dcf565b6143da604083018c613dcf565b6143e7606083018b613dcf565b6143f4608083018a613dcf565b61440160a0830189613dcf565b61440e60c0830188613d3e565b61441b60e0830187613dcf565b614429610100830186613dcf565b614437610120830185613dcf565b614445610140830184613dcf565b9c9b505050505050505050505050565b6000806040838503121561446c5761446b613b02565b5b600061447a85828601613b2d565b925050602061448b85828601613b2d565b9150509250929050565b60006060820190506144aa6000830186613dcf565b6144b76020830185613dcf565b6144c46040830184613dcf565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61450181613b62565b82525050565b600061451383836144f8565b60208301905092915050565b6000602082019050919050565b6000614537826144cc565b61454181856144d7565b935061454c836144e8565b8060005b8381101561457d5781516145648882614507565b975061456f8361451f565b925050600181019050614550565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145bf81613c0d565b82525050565b60006145d183836145b6565b60208301905092915050565b6000602082019050919050565b60006145f58261458a565b6145ff8185614595565b935061460a836145a6565b8060005b8381101561463b57815161462288826145c5565b975061462d836145dd565b92505060018101905061460e565b5085935050505092915050565b60006040820190508181036000830152614662818561452c565b9050818103602083015261467681846145ea565b90509392505050565b60006020828403121561469557614694613b02565b5b60006146a384828501613c30565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146f36020836146ac565b91506146fe826146bd565b602082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b600060408201905061473e6000830185613dcf565b61474b6020830184613ce7565b9392505050565b600060c0820190506147676000830189613dcf565b6147746020830188613dcf565b6147816040830187613dcf565b61478e6060830186613d3e565b61479b6080830185613dcf565b6147a860a0830184613dcf565b979650505050505050565b60006040820190506147c86000830185613dcf565b6147d56020830184613dcf565b9392505050565b600060c0820190506147f16000830189613dcf565b6147fe6020830188613dcf565b61480b6040830187613dcf565b6148186060830186613dcf565b6148256080830185613dcf565b61483260a0830184613dcf565b979650505050505050565b600080fd5b82818337505050565b600061485783856142ab565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561488a5761488961483d565b5b60208302925061489b838584614842565b82840190509392505050565b600060808201905081810360008301526148c281898b61484b565b905081810360208301526148d781878961484b565b905081810360408301526148ec81858761484b565b90506148fb6060830184613dcf565b98975050505050505050565b60006101008201905061491d600083018b613dcf565b61492a602083018a613dcf565b6149376040830189613dcf565b6149446060830188613dcf565b6149516080830187613dcf565b61495e60a0830186613d3e565b61496b60c0830185613dcf565b61497860e0830184613dcf565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149ee82613b0c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a2057614a1f6149b4565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a876026836146ac565b9150614a9282614a2b565b604082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f436f6e66696743656e7465723a20706f6f6c54797065206f7220666163746f7260008201527f79416464726573732063616e206e6f74206265207a65726f2e00000000000000602082015250565b6000614b196039836146ac565b9150614b2482614abd565b604082019050919050565b60006020820190508181036000830152614b4881614b0c565b9050919050565b7f436f6e66696743656e7465723a206d61726b657453776170496e74657263657060008201527f746f722063616e206e6f74206265207a65726f2e000000000000000000000000602082015250565b6000614bab6034836146ac565b9150614bb682614b4f565b604082019050919050565b60006020820190508181036000830152614bda81614b9e565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c49642063616e206e6f7420626560008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b6000614c3d6026836146ac565b9150614c4882614be1565b604082019050919050565b60006020820190508181036000830152614c6c81614c30565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c206e6f7420666f756e64210000600082015250565b6000614ca9601e836146ac565b9150614cb482614c73565b602082019050919050565b60006020820190508181036000830152614cd881614c9c565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614d15601f836146ac565b9150614d2082614cdf565b602082019050919050565b60006020820190508181036000830152614d4481614d08565b9050919050565b7f57616c6c657453657276696365203a20416d6f756e742063616e206e6f74206260008201527f65207a65726f2e00000000000000000000000000000000000000000000000000602082015250565b6000614da76027836146ac565b9150614db282614d4b565b604082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f57616c6c657453657276696365203a20496e73756666696369656e742042616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614e396024836146ac565b9150614e4482614ddd565b604082019050919050565b60006020820190508181036000830152614e6881614e2c565b9050919050565b7f57616c6c65745061796d656e743a416464726573732063616e206e6f7420626560008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b6000614ecb6026836146ac565b9150614ed682614e6f565b604082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f4d61726b6574536572766963653a20496e76616c696420506f6f6c2e00000000600082015250565b6000614f37601c836146ac565b9150614f4282614f01565b602082019050919050565b60006020820190508181036000830152614f6681614f2a565b9050919050565b7f4d61726b6574536572766963653a20496e76616c6964206265742074696d652e600082015250565b6000614fa36020836146ac565b9150614fae82614f6d565b602082019050919050565b60006020820190508181036000830152614fd281614f96565b9050919050565b7f4d61726b6574536572766963653a20496e76616c69642062657420616d6f756e60008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b60006150356022836146ac565b915061504082614fd9565b604082019050919050565b6000602082019050818103600083015261506481615028565b9050919050565b7f4d61726b6574536572766963653a20496e76616c6964206f7074696f6e2e0000600082015250565b60006150a1601e836146ac565b91506150ac8261506b565b602082019050919050565b600060208201905081810360008301526150d081615094565b9050919050565b7f4d61726b6574536572766963653a206f646473466163746f727941646472657360008201527f73206e6f7420666f756e64210000000000000000000000000000000000000000602082015250565b6000615133602c836146ac565b915061513e826150d7565b604082019050919050565b6000602082019050818103600083015261516281615126565b9050919050565b6101008201600082015161518060008501826142cc565b50602082015161519360208501826142cc565b5060408201516151a660408501826144f8565b5060608201516151b960608501826142cc565b5060808201516151cc60808501826142cc565b5060a08201516151df60a08501826142cc565b5060c08201516151f260c08501826142cc565b5060e082015161520560e08501826142cc565b50505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60608201600082015161524d60008501826142cc565b50602082015161526060208501826142cc565b50604082015161527360408501826142cc565b50505050565b60006152858383615237565b60608301905092915050565b6000602082019050919050565b60006152a98261520b565b6152b38185615216565b93506152be83615227565b8060005b838110156152ef5781516152d68882615279565b97506152e183615291565b9250506001810190506152c2565b5085935050505092915050565b6000610120820190506153126000830185615169565b818103610100830152615325818461529e565b90509392505050565b60008151905061533d81613c19565b92915050565b60008151905061535281613b16565b92915050565b600067ffffffffffffffff821115615373576153726140a7565b5b602082029050602081019050919050565b600080fd5b60006060828403121561539f5761539e615384565b5b6153a96060614107565b905060006153b984828501615343565b60008301525060206153cd84828501615343565b60208301525060406153e184828501615343565b60408301525092915050565b60006154006153fb84615358565b614107565b9050808382526020820190506060840283018581111561542357615422613ea2565b5b835b8181101561544c57806154388882615389565b845260208401935050606081019050615425565b5050509392505050565b600082601f83011261546b5761546a613e98565b5b815161547b8482602086016153ed565b91505092915050565b60008060006060848603121561549d5761549c613b02565b5b60006154ab8682870161532e565b93505060206154bc86828701615343565b925050604084015167ffffffffffffffff8111156154dd576154dc613b07565b5b6154e986828701615456565b9150509250925092565b7f4d61726b6574536572766963653a20736c696465206578636565642e00000000600082015250565b6000615529601c836146ac565b9150615534826154f3565b602082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806155a657607f821691505b6020821081036155b9576155b861555f565b5b50919050565b60006155ca82613b0c565b91506155d583613b0c565b92508282019050808211156155ed576155ec6149b4565b5b92915050565b7f4d61726b6574536572766963653a20506f6f6c20616c7265616479206578697360008201527f74732e0000000000000000000000000000000000000000000000000000000000602082015250565b600061564f6023836146ac565b915061565a826155f3565b604082019050919050565b6000602082019050818103600083015261567e81615642565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c206e6f7420666f756e642e0000600082015250565b60006156bb601e836146ac565b91506156c682615685565b602082019050919050565b600060208201905081810360008301526156ea816156ae565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c206f7074696f6e20616c72656160008201527f6479206578697374732e00000000000000000000000000000000000000000000602082015250565b600061574d602a836146ac565b9150615758826156f1565b604082019050919050565b6000602082019050818103600083015261577c81615740565b9050919050565b7f4d61726b6574536572766963653a206f7074696f6e417272206c656e6774682060008201527f696e76616c69642e000000000000000000000000000000000000000000000000602082015250565b60006157df6028836146ac565b91506157ea82615783565b604082019050919050565b6000602082019050818103600083015261580e816157d2565b9050919050565b7f57616c6c65744163636f756e74536572766963653a416464726573732063616e60008201527f206e6f74206265207a65726f2e00000000000000000000000000000000000000602082015250565b6000615871602d836146ac565b915061587c82615815565b604082019050919050565b600060208201905081810360008301526158a081615864565b9050919050565b7f57616c6c65744163636f756e74536572766963653a416d6f756e742063616e2060008201527f6e6f74206265207a65726f2e0000000000000000000000000000000000000000602082015250565b6000615903602c836146ac565b915061590e826158a7565b604082019050919050565b60006020820190508181036000830152615932816158f6565b9050919050565b7f57616c6c65744163636f756e7453657276696365203a20496e7375666669636960008201527f656e742042616c616e6365000000000000000000000000000000000000000000602082015250565b6000615995602b836146ac565b91506159a082615939565b604082019050919050565b600060208201905081810360008301526159c481615988565b9050919050565b60006159d682613b0c565b91506159e183613b0c565b92508282039050818111156159f9576159f86149b4565b5b92915050565b7f57616c6c65745061796d656e743a416d6f756e742063616e206e6f742062652060008201527f7a65726f2e000000000000000000000000000000000000000000000000000000602082015250565b6000615a5b6025836146ac565b9150615a66826159ff565b604082019050919050565b60006020820190508181036000830152615a8a81615a4e565b9050919050565b6000604082019050615aa66000830185613ce7565b615ab36020830184613ce7565b9392505050565b600060208284031215615ad057615acf613b02565b5b6000615ade84828501615343565b91505092915050565b7f57616c6c65745061796d656e743a207472616e7366657220616d6f756e74206560008201527f78636565647320616c6c6f77616e636500000000000000000000000000000000602082015250565b6000615b436030836146ac565b9150615b4e82615ae7565b604082019050919050565b60006020820190508181036000830152615b7281615b36565b9050919050565b6000606082019050615b8e6000830186613ce7565b615b9b6020830185613ce7565b615ba86040830184613dcf565b949350505050565b600081519050919050565b600081905092915050565b60005b83811015615be4578082015181840152602081019050615bc9565b60008484015250505050565b6000615bfb82615bb0565b615c058185615bbb565b9350615c15818560208601615bc6565b80840191505092915050565b6000615c2d8284615bf0565b915081905092915050565b600060c082019050615c4d6000830189613ce7565b615c5a6020830188613dcf565b615c676040830187613dcf565b615c746060830186613dcf565b615c816080830185613dcf565b615c8e60a0830184613dcf565b97965050505050505056fea2646970667358221220ad63aade7b4e0b6b4d13c3a79a90822b456b80a1844b114baf8d2a42745bb70c64736f6c63430008110033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000260e1e9914aadadfd203767f6e28229124a4ecd0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c80637d59721e116100de578063b3d0581711610097578063e08e802a11610071578063e08e802a1461045f578063f0200dcc1461047e578063f03cb74b1461049a578063f2fde38b146104b657610173565b8063b3d05817146103c1578063d066b0b4146103f3578063dfa703c71461042d57610173565b80637d59721e1461030157806388b6c5c21461031d5780638da5cb5b1461033b57806393150e7a146103595780639776d6fd14610375578063ac2fadb0146103a557610173565b8063505b4b8a11610130578063505b4b8a146102385780635673b02d1461025457806366e5804a146102705780636c60ac02146102ab57806370a08231146102c7578063715018a6146102f757610173565b806305723e81146101785780630705e9b814610194578063198bbb67146101b057806321cf2e2b146101cc5780632e1a7d4d146101ea5780632f35746d1461021a575b600080fd5b610192600480360381019061018d9190613ba0565b6104d2565b005b6101ae60048036038101906101a99190613be0565b610595565b005b6101ca60048036038101906101c59190613c45565b610654565b005b6101d4610738565b6040516101e19190613cf6565b60405180910390f35b61020460048036038101906101ff9190613d11565b610747565b6040516102119190613d4d565b60405180910390f35b6102226107bb565b60405161022f9190613d4d565b60405180910390f35b610252600480360381019061024d9190613be0565b6107ca565b005b61026e60048036038101906102699190613d68565b610889565b005b61028a60048036038101906102859190613d11565b610936565b6040516102a29c9b9a99989796959493929190613dde565b60405180910390f35b6102c560048036038101906102c09190613efd565b6109bd565b005b6102e160048036038101906102dc9190613be0565b610a92565b6040516102ee9190613fb1565b60405180910390f35b6102ff610aa4565b005b61031b60048036038101906103169190613be0565b610be1565b005b610325610ca0565b6040516103329190613cf6565b60405180910390f35b610343610caf565b6040516103509190613cf6565b60405180910390f35b610373600480360381019061036e9190613fcc565b610cd9565b005b61038f600480360381019061038a9190613d11565b610dea565b60405161039c9190613cf6565b60405180910390f35b6103bf60048036038101906103ba91906141e5565b610dfc565b005b6103db60048036038101906103d69190613d11565b610ec6565b6040516103ea9392919061435e565b60405180910390f35b61040d60048036038101906104089190613d11565b61109e565b6040516104249b9a999897969594939291906143aa565b60405180910390f35b61044760048036038101906104429190614455565b61111b565b60405161045693929190614495565b60405180910390f35b61046761114a565b604051610475929190614648565b60405180910390f35b6104986004803603810190610493919061467f565b6112c6565b005b6104b460048036038101906104af9190613be0565b611385565b005b6104d060048036038101906104cb9190613be0565b611444565b005b6104da6115ef565b73ffffffffffffffffffffffffffffffffffffffff166104f8610caf565b73ffffffffffffffffffffffffffffffffffffffff161461054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054590614709565b60405180910390fd5b61055882826115f7565b7f4d731f01ca6182ac3ce55414dbf228a3c70f6f6ede92037cab0178c4709cdba48282604051610589929190614729565b60405180910390a15050565b61059d6115ef565b73ffffffffffffffffffffffffffffffffffffffff166105bb610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890614709565b60405180910390fd5b61061a816116c9565b7fcc0ec7a4bd086aa6e930f2d2159e661a6cfab1c680ea07034498b3fb4c8ef3b0816040516106499190613cf6565b60405180910390a150565b61065c6115ef565b73ffffffffffffffffffffffffffffffffffffffff1661067a610caf565b73ffffffffffffffffffffffffffffffffffffffff16146106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c790614709565b60405180910390fd5b60006106e18888888888888861185c565b90506106ec816118a6565b877f4a6001d0f96413195d340faa77266bafcdae972acb7ff87988d53dd6b1f7e89688888888888860405161072696959493929190614752565b60405180910390a25050505050505050565b6000610742611a03565b905090565b6000610751611a2d565b61075a82611a7c565b600190503373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56883426040516107a69291906147b3565b60405180910390a26107b6611b2a565b919050565b60006107c5611b34565b905090565b6107d26115ef565b73ffffffffffffffffffffffffffffffffffffffff166107f0610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083d90614709565b60405180910390fd5b61084f81611b4b565b7f6362eee3edd630c6ba7c17f2ce5fff5afa5ebc3c0eda60299832180e6c230bc18160405161087e9190613cf6565b60405180910390a150565b610891611a2d565b600061089f85858585611bfe565b905060008060006108af84611c31565b80935081945082955050505083600001513373ffffffffffffffffffffffffffffffffffffffff167f4da0018238b97e3c8db4b8b995e62d5ef757c7ca7c0cfba42a64d4ec9957623185876020015188604001518960600151888860405161091c969594939291906147dc565b60405180910390a350505050610930611b2a565b50505050565b60008060008060008060008060008060008060006109538e6122a1565b9050806000015181602001518260400151836060015184608001518560a001518660c001518760e001518861010001518961012001518a61014001518b61016001519c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b6109c56115ef565b73ffffffffffffffffffffffffffffffffffffffff166109e3610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090614709565b60405180910390fd5b610a478686868686866123a4565b7f4c1dba327108448f42ded7d8aa3092213bb2da155245a2ad45e87353a4b3e1b286868686868642604051610a8297969594939291906148a7565b60405180910390a1505050505050565b6000610a9d826124fd565b9050919050565b610aac6115ef565b73ffffffffffffffffffffffffffffffffffffffff16610aca610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790614709565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610be96115ef565b73ffffffffffffffffffffffffffffffffffffffff16610c07610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614709565b60405180910390fd5b610c6681612549565b7f2e7e455b574b2b33817d343dbb96718bc105b981534481c3a282d1d05a16395881604051610c959190613cf6565b60405180910390a150565b6000610caa612619565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ce16115ef565b73ffffffffffffffffffffffffffffffffffffffff16610cff610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90614709565b60405180910390fd5b6000610d688a8a8a8a8a8a8a8a8a612643565b9050610d738161269c565b80600001517f9221fe49f6b02d022d99300ea7bfc10a640561003a3eaeecc40a2d23998454b882602001518360400151846060015185608001518660a001518760c001518860e00151896101000151604051610dd6989796959493929190614907565b60405180910390a250505050505050505050565b6000610df5826127e4565b9050919050565b610e046115ef565b73ffffffffffffffffffffffffffffffffffffffff16610e22610caf565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90614709565b60405180910390fd5b610e8484848484612821565b837f663809696f88621ea9ed9be6f1ea5c2af720e0b9c08fcc1d00e31dd8ebbf6ec2848484604051610eb89392919061435e565b60405180910390a250505050565b60608060606000610ed685612a4c565b9050805167ffffffffffffffff811115610ef357610ef26140a7565b5b604051908082528060200260200182016040528015610f215781602001602082028036833780820191505090505b509350805167ffffffffffffffff811115610f3f57610f3e6140a7565b5b604051908082528060200260200182016040528015610f6d5781602001602082028036833780820191505090505b509250805167ffffffffffffffff811115610f8b57610f8a6140a7565b5b604051908082528060200260200182016040528015610fb95781602001602082028036833780820191505090505b50915060005b815181101561109557818181518110610fdb57610fda614985565b5b602002602001015160000151858281518110610ffa57610ff9614985565b5b60200260200101818152505081818151811061101957611018614985565b5b60200260200101516020015184828151811061103857611037614985565b5b60200260200101818152505081818151811061105757611056614985565b5b60200260200101516040015183828151811061107657611075614985565b5b602002602001018181525050808061108d906149e3565b915050610fbf565b50509193909250565b6000806000806000806000806000806000806110b98d612adc565b9050806000015181602001518260400151836060015184608001518560a001518660c001518760e001518861010001518961012001518a61014001519b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b60008060008061112b8686612b89565b9050806000015181602001518260400151935093509350509250925092565b6060806000611157612c77565b9050805167ffffffffffffffff811115611174576111736140a7565b5b6040519080825280602002602001820160405280156111a25781602001602082028036833780820191505090505b509250805167ffffffffffffffff8111156111c0576111bf6140a7565b5b6040519080825280602002602001820160405280156111ee5781602001602082028036833780820191505090505b50915060005b81518110156112c0578181815181106112105761120f614985565b5b60200260200101516000015184828151811061122f5761122e614985565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081818151811061127c5761127b614985565b5b60200260200101516020015183828151811061129b5761129a614985565b5b60200260200101901515908115158152505080806112b8906149e3565b9150506111f4565b50509091565b6112ce6115ef565b73ffffffffffffffffffffffffffffffffffffffff166112ec610caf565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990614709565b60405180910390fd5b61134b81612d43565b7ff4a33ad1dba9b2f83a9958f7acb87017a1b2d1079a5bf00976eb334826a93e988160405161137a9190613d4d565b60405180910390a150565b61138d6115ef565b73ffffffffffffffffffffffffffffffffffffffff166113ab610caf565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890614709565b60405180910390fd5b61140a81612d60565b7f7105ce0d7a9eedb17c88d0aaabec0cb89bd3fab658b384213978acd3ccbea8f3816040516114399190613cf6565b60405180910390a150565b61144c6115ef565b73ffffffffffffffffffffffffffffffffffffffff1661146a610caf565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790614709565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690614a9d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000821180156116345750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90614b2f565b60405180910390fd5b806006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90614bc1565b60405180910390fd5b600080600061174684612e13565b80935081945082955050505082156117975760016007828154811061176e5761176d614985565b5b9060005260206000200160000160146101000a81548160ff021916908315150217905550611856565b600760405180604001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001600115158152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555050505b50505050565b61186461392c565b6040518060e001604052808981526020018881526020018781526020018681526020018515158152602001848152602001838152509050979650505050505050565b60008160000151116118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490614c53565b60405180910390fd5b600060096000836000015181526020019081526020016000209050600081600001541161194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194690614cbf565b60405180910390fd5b60008260200151111561196a57816020015181600201819055505b60008260a001511115611985578160a0015181600701819055505b60008260c0015111156119a0578160c0015181600801819055505b6000826040015111156119bb57816040015181600301819055505b6000826060015111156119d657816060015181600401819055505b81608001518160060160006101000a81548160ff0219169083151502179055504281600a01819055505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260005403611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990614d2b565b60405180910390fd5b6002600081905550565b6000611a87336124fd565b905060008211611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614dbd565b60405180910390fd5b81811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614e4f565b60405180910390fd5b611b1b33600084612f4b565b50611b26338361313e565b5050565b6001600081905550565b6000600560149054906101000a900460ff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614ee1565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c0661396b565b6040518060800160405280868152602001858152602001848152602001838152509050949350505050565b600080600080600960008660000151815260200190815260200160002090506000816000015411611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90614f4d565b60405180910390fd5b80600701544210158015611caf575080600801544211155b611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614fb9565b60405180910390fd5b8060030154856040015110158015611d0e57508060040154856040015111155b611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d449061504b565b60405180910390fd5b600060405180610100016040528087600001518152602001836001015481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018760200151815260200187604001518152602001876060015181526020018360050154815260200183600301548152509050611dca8160800151613479565b6000600a60008860000151815260200190815260200160002090506000818054905067ffffffffffffffff811115611e0557611e046140a7565b5b604051908082528060200260200182016040528015611e3e57816020015b611e2b613993565b815260200190600190039081611e235790505b5090506000805b8380549050811015611ee3576000848281548110611e6657611e65614985565b5b90600052602060002090600302019050604051806060016040528082600001548152602001826001015481526020018260020154815250848381518110611eb057611eaf614985565b5b60200260200101819052508a60200151816000015403611ecf57600192505b508080611edb906149e3565b915050611e45565b5080611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906150b7565b60405180910390fd5b600042905060008060606000611f3d8a600101546127e4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590615149565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166329e3188f8a896040518363ffffffff1660e01b8152600401611fe99291906152fc565b600060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061202f9190615484565b8094508195508296505050506000151584151514612082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120799061553f565b60405180910390fd5b612115600880546120929061558e565b80601f01602080910402602001604051908101604052809291908181526020018280546120be9061558e565b801561210b5780601f106120e05761010080835404028352916020019161210b565b820191906000526020600020905b8154815290600101906020018083116120ee57829003601f168201915b5050505050613722565b9c506040518061018001604052808e81526020018a6000015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018a6060015181526020018481526020018a60800151815260200160001515815260200160008152602001600081526020016000815260200186815260200186815250600b60008f8152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b01559050506122808883613781565b849a50829b506122908984613838565b505050505050505050509193909250565b6122a96139b4565b600b60008381526020019081526020016000206040518061018001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b820154815250509050919050565b60005b868690508110156124f4576000600b60008989858181106123cb576123ca614985565b5b90506020020135815260200190815260200160002090508060060160009054906101000a900460ff166124e05760018160060160006101000a81548160ff0219169083151502179055504281600701819055504281600b018190555085858381811061243a57612439614985565b5b90506020020135816008018190555083838381811061245c5761245b614985565b5b90506020020135816009018190555060008484848181106124805761247f614985565b5b9050602002013587878581811061249a57612499614985565b5b905060200201356124ab91906155bf565b90506124dd8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600183612f4b565b50505b5080806124ec906149e3565b9150506123a7565b50505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af90614bc1565b60405180910390fd5b60008060006125c684612e13565b8093508194508295505050508215612613576000600782815481106125ee576125ed614985565b5b9060005260206000200160000160146101000a81548160ff0219169083151502179055505b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61264b613a2d565b6040518061012001604052808b81526020018a815260200189815260200188815260200187815260200186815260200185151581526020018481526020018381525090509998505050505050505050565b60008160000151116126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90614c53565b60405180910390fd5b6000600960008360000151815260200190815260200160002090506000816000015414612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90615665565b60405180910390fd5b8160000151816000018190555081602001518160010181905550816040015181600201819055508160e0015181600701819055508160a00151816005018190555081610100015181600801819055508160c001518160060160006101000a81548160ff02191690831515021790555081606001518160030181905550816080015181600401819055504281600901819055504281600a01819055505050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008411612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614c53565b60405180910390fd5b600060096000868152602001908152602001600020905060008160000154116128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b9906156d1565b60405180910390fd5b6000600a600087815260200190815260200160002090506000818054905014612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790615763565b60405180910390fd5b83518551148015612932575082518551145b612971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612968906157f5565b60405180910390fd5b60005b8551811015612a435781604051806060016040528088848151811061299c5761299b614985565b5b602002602001015181526020018784815181106129bc576129bb614985565b5b602002602001015181526020018684815181106129dc576129db614985565b5b6020026020010151815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000155602082015181600101556040820151816002015550508080612a3b906149e3565b915050612974565b50505050505050565b6060600a6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015612ad15783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190612a81565b505050509050919050565b612ae4613a7b565b60096000838152602001908152602001600020604051806101600160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152602001600a820154815250509050919050565b612b91613ad7565b6000600a6000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015612c165783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190612bc6565b50505050905060005b8151811015612c6f576000828281518110612c3d57612c3c614985565b5b6020026020010151905084816000015103612c5b5780935050612c6f565b508080612c67906149e3565b915050612c1f565b505092915050565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015612d3a578382906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16151515158152505081526020019060010190612c9b565b50505050905090565b80600560146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614ee1565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060078054905003612e34576000806000925092509250612f44565b60005b600780549050811015612f4257600060078281548110612e5a57612e59614985565b5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16151515158152505090508573ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603612f2e5760018160200151839450945094505050612f44565b508080612f3a906149e3565b915050612e37565b505b9193909250565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb290615887565b60405180910390fd5b60008211612ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff590615919565b60405180910390fd5b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154036130ad57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081600101819055504281600201819055504281600301819055505b83156130ca578281600101546130c391906155bf565b9150613124565b8281600101541015613111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613108906159ab565b60405180910390fd5b82816001015461312191906159cb565b91505b818160010181905550428160030181905550509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a490614ee1565b60405180910390fd5b600081116131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e790615a71565b60405180910390fd5b600560149054906101000a900460ff16156133c15780600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401613285929190615a91565b6020604051808303816000875af11580156132a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c89190615aba565b1015613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330090615b59565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff1660e01b815260040161338a93929190615b79565b600060405180830381600087803b1580156133a457600080fd5b505af11580156133b8573d6000803e3d6000fd5b50505050613475565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff1660e01b815260040161344293929190615b79565b600060405180830381600087803b15801561345c57600080fd5b505af1158015613470573d6000803e3d6000fd5b505050505b5050565b600081116134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b390615a71565b60405180910390fd5b600560149054906101000a900460ff161561366b5780600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161352f929190615a91565b6020604051808303816000875af115801561354e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135729190615aba565b10156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90615b59565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161363493929190615b79565b600060405180830381600087803b15801561364e57600080fd5b505af1158015613662573d6000803e3d6000fd5b5050505061371f565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016136ec93929190615b79565b600060405180830381600087803b15801561370657600080fd5b505af115801561371a573d6000803e3d6000fd5b505050505b50565b6000806002836040516137359190615c21565b908152602001604051809103902054905060018161375391906155bf565b9050806002846040516137669190615c21565b90815260200160405180910390208190555080915050919050565b60005b82805490508110156138335760008382815481106137a5576137a4614985565b5b9060005260206000209060030201905060005b835181101561381e5760008482815181106137d6576137d5614985565b5b60200260200101519050806000015183600001540361380a5780602001518360010181905550806040015183600201819055505b508080613816906149e3565b9150506137b8565b5050808061382b906149e3565b915050613784565b505050565b6000613842612c77565b90506000815111156139275760005b815181101561392557600082828151811061386f5761386e614985565b5b6020026020010151905080602001511561391157806000015173ffffffffffffffffffffffffffffffffffffffff1663c7672e1586604001518760000151886020015189606001518a608001518a6040518763ffffffff1660e01b81526004016138de96959493929190615c38565b600060405180830381600087803b1580156138f857600080fd5b505af115801561390c573d6000803e3d6000fd5b505050505b50808061391d906149e3565b915050613851565b505b505050565b6040518060e001604052806000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6040518061018001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b604051806101600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613b1f81613b0c565b8114613b2a57600080fd5b50565b600081359050613b3c81613b16565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6d82613b42565b9050919050565b613b7d81613b62565b8114613b8857600080fd5b50565b600081359050613b9a81613b74565b92915050565b60008060408385031215613bb757613bb6613b02565b5b6000613bc585828601613b2d565b9250506020613bd685828601613b8b565b9150509250929050565b600060208284031215613bf657613bf5613b02565b5b6000613c0484828501613b8b565b91505092915050565b60008115159050919050565b613c2281613c0d565b8114613c2d57600080fd5b50565b600081359050613c3f81613c19565b92915050565b600080600080600080600060e0888a031215613c6457613c63613b02565b5b6000613c728a828b01613b2d565b9750506020613c838a828b01613b2d565b9650506040613c948a828b01613b2d565b9550506060613ca58a828b01613b2d565b9450506080613cb68a828b01613c30565b93505060a0613cc78a828b01613b2d565b92505060c0613cd88a828b01613b2d565b91505092959891949750929550565b613cf081613b62565b82525050565b6000602082019050613d0b6000830184613ce7565b92915050565b600060208284031215613d2757613d26613b02565b5b6000613d3584828501613b2d565b91505092915050565b613d4781613c0d565b82525050565b6000602082019050613d626000830184613d3e565b92915050565b60008060008060808587031215613d8257613d81613b02565b5b6000613d9087828801613b2d565b9450506020613da187828801613b2d565b9350506040613db287828801613b2d565b9250506060613dc387828801613b2d565b91505092959194509250565b613dd881613b0c565b82525050565b600061018082019050613df4600083018f613dcf565b613e01602083018e613dcf565b613e0e604083018d613ce7565b613e1b606083018c613dcf565b613e28608083018b613dcf565b613e3560a083018a613dcf565b613e4260c0830189613d3e565b613e4f60e0830188613dcf565b613e5d610100830187613dcf565b613e6b610120830186613dcf565b613e79610140830185613dcf565b613e87610160830184613dcf565b9d9c50505050505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ebd57613ebc613e98565b5b8235905067ffffffffffffffff811115613eda57613ed9613e9d565b5b602083019150836020820283011115613ef657613ef5613ea2565b5b9250929050565b60008060008060008060608789031215613f1a57613f19613b02565b5b600087013567ffffffffffffffff811115613f3857613f37613b07565b5b613f4489828a01613ea7565b9650965050602087013567ffffffffffffffff811115613f6757613f66613b07565b5b613f7389828a01613ea7565b9450945050604087013567ffffffffffffffff811115613f9657613f95613b07565b5b613fa289828a01613ea7565b92509250509295509295509295565b6000602082019050613fc66000830184613dcf565b92915050565b60008060008060008060008060006101208a8c031215613fef57613fee613b02565b5b6000613ffd8c828d01613b2d565b995050602061400e8c828d01613b2d565b985050604061401f8c828d01613b2d565b97505060606140308c828d01613b2d565b96505060806140418c828d01613b2d565b95505060a06140528c828d01613b2d565b94505060c06140638c828d01613c30565b93505060e06140748c828d01613b2d565b9250506101006140868c828d01613b2d565b9150509295985092959850929598565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140df82614096565b810181811067ffffffffffffffff821117156140fe576140fd6140a7565b5b80604052505050565b6000614111613af8565b905061411d82826140d6565b919050565b600067ffffffffffffffff82111561413d5761413c6140a7565b5b602082029050602081019050919050565b600061416161415c84614122565b614107565b9050808382526020820190506020840283018581111561418457614183613ea2565b5b835b818110156141ad57806141998882613b2d565b845260208401935050602081019050614186565b5050509392505050565b600082601f8301126141cc576141cb613e98565b5b81356141dc84826020860161414e565b91505092915050565b600080600080608085870312156141ff576141fe613b02565b5b600061420d87828801613b2d565b945050602085013567ffffffffffffffff81111561422e5761422d613b07565b5b61423a878288016141b7565b935050604085013567ffffffffffffffff81111561425b5761425a613b07565b5b614267878288016141b7565b925050606085013567ffffffffffffffff81111561428857614287613b07565b5b614294878288016141b7565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142d581613b0c565b82525050565b60006142e783836142cc565b60208301905092915050565b6000602082019050919050565b600061430b826142a0565b61431581856142ab565b9350614320836142bc565b8060005b8381101561435157815161433888826142db565b9750614343836142f3565b925050600181019050614324565b5085935050505092915050565b600060608201905081810360008301526143788186614300565b9050818103602083015261438c8185614300565b905081810360408301526143a08184614300565b9050949350505050565b6000610160820190506143c0600083018e613dcf565b6143cd602083018d613dcf565b6143da604083018c613dcf565b6143e7606083018b613dcf565b6143f4608083018a613dcf565b61440160a0830189613dcf565b61440e60c0830188613d3e565b61441b60e0830187613dcf565b614429610100830186613dcf565b614437610120830185613dcf565b614445610140830184613dcf565b9c9b505050505050505050505050565b6000806040838503121561446c5761446b613b02565b5b600061447a85828601613b2d565b925050602061448b85828601613b2d565b9150509250929050565b60006060820190506144aa6000830186613dcf565b6144b76020830185613dcf565b6144c46040830184613dcf565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61450181613b62565b82525050565b600061451383836144f8565b60208301905092915050565b6000602082019050919050565b6000614537826144cc565b61454181856144d7565b935061454c836144e8565b8060005b8381101561457d5781516145648882614507565b975061456f8361451f565b925050600181019050614550565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145bf81613c0d565b82525050565b60006145d183836145b6565b60208301905092915050565b6000602082019050919050565b60006145f58261458a565b6145ff8185614595565b935061460a836145a6565b8060005b8381101561463b57815161462288826145c5565b975061462d836145dd565b92505060018101905061460e565b5085935050505092915050565b60006040820190508181036000830152614662818561452c565b9050818103602083015261467681846145ea565b90509392505050565b60006020828403121561469557614694613b02565b5b60006146a384828501613c30565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146f36020836146ac565b91506146fe826146bd565b602082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b600060408201905061473e6000830185613dcf565b61474b6020830184613ce7565b9392505050565b600060c0820190506147676000830189613dcf565b6147746020830188613dcf565b6147816040830187613dcf565b61478e6060830186613d3e565b61479b6080830185613dcf565b6147a860a0830184613dcf565b979650505050505050565b60006040820190506147c86000830185613dcf565b6147d56020830184613dcf565b9392505050565b600060c0820190506147f16000830189613dcf565b6147fe6020830188613dcf565b61480b6040830187613dcf565b6148186060830186613dcf565b6148256080830185613dcf565b61483260a0830184613dcf565b979650505050505050565b600080fd5b82818337505050565b600061485783856142ab565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561488a5761488961483d565b5b60208302925061489b838584614842565b82840190509392505050565b600060808201905081810360008301526148c281898b61484b565b905081810360208301526148d781878961484b565b905081810360408301526148ec81858761484b565b90506148fb6060830184613dcf565b98975050505050505050565b60006101008201905061491d600083018b613dcf565b61492a602083018a613dcf565b6149376040830189613dcf565b6149446060830188613dcf565b6149516080830187613dcf565b61495e60a0830186613d3e565b61496b60c0830185613dcf565b61497860e0830184613dcf565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149ee82613b0c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a2057614a1f6149b4565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a876026836146ac565b9150614a9282614a2b565b604082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f436f6e66696743656e7465723a20706f6f6c54797065206f7220666163746f7260008201527f79416464726573732063616e206e6f74206265207a65726f2e00000000000000602082015250565b6000614b196039836146ac565b9150614b2482614abd565b604082019050919050565b60006020820190508181036000830152614b4881614b0c565b9050919050565b7f436f6e66696743656e7465723a206d61726b657453776170496e74657263657060008201527f746f722063616e206e6f74206265207a65726f2e000000000000000000000000602082015250565b6000614bab6034836146ac565b9150614bb682614b4f565b604082019050919050565b60006020820190508181036000830152614bda81614b9e565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c49642063616e206e6f7420626560008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b6000614c3d6026836146ac565b9150614c4882614be1565b604082019050919050565b60006020820190508181036000830152614c6c81614c30565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c206e6f7420666f756e64210000600082015250565b6000614ca9601e836146ac565b9150614cb482614c73565b602082019050919050565b60006020820190508181036000830152614cd881614c9c565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614d15601f836146ac565b9150614d2082614cdf565b602082019050919050565b60006020820190508181036000830152614d4481614d08565b9050919050565b7f57616c6c657453657276696365203a20416d6f756e742063616e206e6f74206260008201527f65207a65726f2e00000000000000000000000000000000000000000000000000602082015250565b6000614da76027836146ac565b9150614db282614d4b565b604082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f57616c6c657453657276696365203a20496e73756666696369656e742042616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614e396024836146ac565b9150614e4482614ddd565b604082019050919050565b60006020820190508181036000830152614e6881614e2c565b9050919050565b7f57616c6c65745061796d656e743a416464726573732063616e206e6f7420626560008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b6000614ecb6026836146ac565b9150614ed682614e6f565b604082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f4d61726b6574536572766963653a20496e76616c696420506f6f6c2e00000000600082015250565b6000614f37601c836146ac565b9150614f4282614f01565b602082019050919050565b60006020820190508181036000830152614f6681614f2a565b9050919050565b7f4d61726b6574536572766963653a20496e76616c6964206265742074696d652e600082015250565b6000614fa36020836146ac565b9150614fae82614f6d565b602082019050919050565b60006020820190508181036000830152614fd281614f96565b9050919050565b7f4d61726b6574536572766963653a20496e76616c69642062657420616d6f756e60008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b60006150356022836146ac565b915061504082614fd9565b604082019050919050565b6000602082019050818103600083015261506481615028565b9050919050565b7f4d61726b6574536572766963653a20496e76616c6964206f7074696f6e2e0000600082015250565b60006150a1601e836146ac565b91506150ac8261506b565b602082019050919050565b600060208201905081810360008301526150d081615094565b9050919050565b7f4d61726b6574536572766963653a206f646473466163746f727941646472657360008201527f73206e6f7420666f756e64210000000000000000000000000000000000000000602082015250565b6000615133602c836146ac565b915061513e826150d7565b604082019050919050565b6000602082019050818103600083015261516281615126565b9050919050565b6101008201600082015161518060008501826142cc565b50602082015161519360208501826142cc565b5060408201516151a660408501826144f8565b5060608201516151b960608501826142cc565b5060808201516151cc60808501826142cc565b5060a08201516151df60a08501826142cc565b5060c08201516151f260c08501826142cc565b5060e082015161520560e08501826142cc565b50505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60608201600082015161524d60008501826142cc565b50602082015161526060208501826142cc565b50604082015161527360408501826142cc565b50505050565b60006152858383615237565b60608301905092915050565b6000602082019050919050565b60006152a98261520b565b6152b38185615216565b93506152be83615227565b8060005b838110156152ef5781516152d68882615279565b97506152e183615291565b9250506001810190506152c2565b5085935050505092915050565b6000610120820190506153126000830185615169565b818103610100830152615325818461529e565b90509392505050565b60008151905061533d81613c19565b92915050565b60008151905061535281613b16565b92915050565b600067ffffffffffffffff821115615373576153726140a7565b5b602082029050602081019050919050565b600080fd5b60006060828403121561539f5761539e615384565b5b6153a96060614107565b905060006153b984828501615343565b60008301525060206153cd84828501615343565b60208301525060406153e184828501615343565b60408301525092915050565b60006154006153fb84615358565b614107565b9050808382526020820190506060840283018581111561542357615422613ea2565b5b835b8181101561544c57806154388882615389565b845260208401935050606081019050615425565b5050509392505050565b600082601f83011261546b5761546a613e98565b5b815161547b8482602086016153ed565b91505092915050565b60008060006060848603121561549d5761549c613b02565b5b60006154ab8682870161532e565b93505060206154bc86828701615343565b925050604084015167ffffffffffffffff8111156154dd576154dc613b07565b5b6154e986828701615456565b9150509250925092565b7f4d61726b6574536572766963653a20736c696465206578636565642e00000000600082015250565b6000615529601c836146ac565b9150615534826154f3565b602082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806155a657607f821691505b6020821081036155b9576155b861555f565b5b50919050565b60006155ca82613b0c565b91506155d583613b0c565b92508282019050808211156155ed576155ec6149b4565b5b92915050565b7f4d61726b6574536572766963653a20506f6f6c20616c7265616479206578697360008201527f74732e0000000000000000000000000000000000000000000000000000000000602082015250565b600061564f6023836146ac565b915061565a826155f3565b604082019050919050565b6000602082019050818103600083015261567e81615642565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c206e6f7420666f756e642e0000600082015250565b60006156bb601e836146ac565b91506156c682615685565b602082019050919050565b600060208201905081810360008301526156ea816156ae565b9050919050565b7f4d61726b6574536572766963653a20506f6f6c206f7074696f6e20616c72656160008201527f6479206578697374732e00000000000000000000000000000000000000000000602082015250565b600061574d602a836146ac565b9150615758826156f1565b604082019050919050565b6000602082019050818103600083015261577c81615740565b9050919050565b7f4d61726b6574536572766963653a206f7074696f6e417272206c656e6774682060008201527f696e76616c69642e000000000000000000000000000000000000000000000000602082015250565b60006157df6028836146ac565b91506157ea82615783565b604082019050919050565b6000602082019050818103600083015261580e816157d2565b9050919050565b7f57616c6c65744163636f756e74536572766963653a416464726573732063616e60008201527f206e6f74206265207a65726f2e00000000000000000000000000000000000000602082015250565b6000615871602d836146ac565b915061587c82615815565b604082019050919050565b600060208201905081810360008301526158a081615864565b9050919050565b7f57616c6c65744163636f756e74536572766963653a416d6f756e742063616e2060008201527f6e6f74206265207a65726f2e0000000000000000000000000000000000000000602082015250565b6000615903602c836146ac565b915061590e826158a7565b604082019050919050565b60006020820190508181036000830152615932816158f6565b9050919050565b7f57616c6c65744163636f756e7453657276696365203a20496e7375666669636960008201527f656e742042616c616e6365000000000000000000000000000000000000000000602082015250565b6000615995602b836146ac565b91506159a082615939565b604082019050919050565b600060208201905081810360008301526159c481615988565b9050919050565b60006159d682613b0c565b91506159e183613b0c565b92508282039050818111156159f9576159f86149b4565b5b92915050565b7f57616c6c65745061796d656e743a416d6f756e742063616e206e6f742062652060008201527f7a65726f2e000000000000000000000000000000000000000000000000000000602082015250565b6000615a5b6025836146ac565b9150615a66826159ff565b604082019050919050565b60006020820190508181036000830152615a8a81615a4e565b9050919050565b6000604082019050615aa66000830185613ce7565b615ab36020830184613ce7565b9392505050565b600060208284031215615ad057615acf613b02565b5b6000615ade84828501615343565b91505092915050565b7f57616c6c65745061796d656e743a207472616e7366657220616d6f756e74206560008201527f78636565647320616c6c6f77616e636500000000000000000000000000000000602082015250565b6000615b436030836146ac565b9150615b4e82615ae7565b604082019050919050565b60006020820190508181036000830152615b7281615b36565b9050919050565b6000606082019050615b8e6000830186613ce7565b615b9b6020830185613ce7565b615ba86040830184613dcf565b949350505050565b600081519050919050565b600081905092915050565b60005b83811015615be4578082015181840152602081019050615bc9565b60008484015250505050565b6000615bfb82615bb0565b615c058185615bbb565b9350615c15818560208601615bc6565b80840191505092915050565b6000615c2d8284615bf0565b915081905092915050565b600060c082019050615c4d6000830189613ce7565b615c5a6020830188613dcf565b615c676040830187613dcf565b615c746060830186613dcf565b615c816080830185613dcf565b615c8e60a0830184613dcf565b97965050505050505056fea2646970667358221220ad63aade7b4e0b6b4d13c3a79a90822b456b80a1844b114baf8d2a42745bb70c64736f6c63430008110033

Deployed Bytecode Sourcemap

23317:8659:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24182:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24510:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27847:541;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23374:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31619:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23970:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23488:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30382:493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30881:619;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;30103:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31506:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1501:148;;;:::i;:::-;;24719:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23667:112;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1276:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25372:620;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24381:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26618:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29416:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;28394:616;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;29016:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;24928:438;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24061:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23783:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1657:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24182:195;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24280:40:::1;24296:8;24305:14;24280:15;:40::i;:::-;24332:39;24347:8;24356:14;24332:39;;;;;;;:::i;:::-;;;;;;;;24182:195:::0;;:::o;24510:205::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24606:46:::1;24630:21;24606:23;:46::i;:::-;24664:45;24687:21;24664:45;;;;;;:::i;:::-;;;;;;;;24510:205:::0;:::o;27847:541::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28104:36:::1;28143:92;28158:6;28165:9;28175:12;28188;28201:9;28211:12;28224:10;28143:14;:92::i;:::-;28104:131;;28242:34;28264:11;28242:21;:34::i;:::-;28305:6;28288:94;28312:9;28322:12;28335;28348:9;28358:12;28371:10;28288:94;;;;;;;;;;;:::i;:::-;;;;;;;;28095:293;27847:541:::0;;;;;;;:::o;23374:110::-;23435:7;23457:21;:19;:21::i;:::-;23450:28;;23374:110;:::o;31619:193::-;31692:12;326:21;:19;:21::i;:::-;31712:17:::1;31722:6;31712:9;:17::i;:::-;31747:4;31736:15;;31772:10;31763:43;;;31783:6;31790:15;31763:43;;;;;;;:::i;:::-;;;;;;;;370:20:::0;:18;:20::i;:::-;31619:193;;;:::o;23970:87::-;24021:4;24040:11;:9;:11::i;:::-;24033:18;;23970:87;:::o;23488:175::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23574:36:::1;23594:15;23574:19;:36::i;:::-;23622:35;23641:15;23622:35;;;;;;:::i;:::-;;;;;;;;23488:175:::0;:::o;30382:493::-;326:21;:19;:21::i;:::-;30525:32:::1;30560:46;30576:6;30583;30590:9;30600:5;30560:15;:46::i;:::-;30525:81;;30613:13;30633:17:::0;30657:18:::1;30713:19;30719:12;30713:5;:19::i;:::-;30682:50;;;;;;;;;;;;30760:12;:19;;;30749:10;30744:125;;;30780:5;30786:12;:19;;;30806:12;:22;;;30829:12;:18;;;30848:9;30858:10;30744:125;;;;;;;;;;;:::i;:::-;;;;;;;;30518:357;;;;370:20:::0;:18;:20::i;:::-;30382:493;;;;:::o;30881:619::-;30957:13;30979:14;31002:19;31030:14;31053:16;31078:17;31104:14;31127:16;31152:19;31180:20;31209:18;31236;31266:26;31295:22;31310:6;31295:14;:22::i;:::-;31266:51;;31332:3;:9;;;31342:3;:10;;;31353:3;:15;;;31369:3;:10;;;31380:3;:12;;;31393:3;:13;;;31407:3;:10;;;31418:3;:12;;;31431:3;:15;;;31447:3;:16;;;31464:3;:14;;;31479:3;:14;;;31324:170;;;;;;;;;;;;;;;;;;;;;;;;;30881:619;;;;;;;;;;;;;:::o;30103:273::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30273:35:::1;30279:8;;30288:9;;30298;;30273:5;:35::i;:::-;30320:50;30325:8;;30334:9;;30344;;30354:15;30320:50;;;;;;;;;;;;:::i;:::-;;;;;;;;30103:273:::0;;;;;;:::o;31506:109::-;31570:7;31593:16;31604:4;31593:10;:16::i;:::-;31586:23;;31506:109;;;:::o;1501:148::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1608:1:::1;1571:40;;1592:6;;;;;;;;;;;1571:40;;;;;;;;;;;;1639:1;1622:6;;:19;;;;;;;;;;;;;;;;;;1501:148::o:0;24719:205::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24815:46:::1;24839:21;24815:23;:46::i;:::-;24873:45;24896:21;24873:45;;;;;;:::i;:::-;;;;;;;;24719:205:::0;:::o;23667:112::-;23729:7;23751:22;:20;:22::i;:::-;23744:29;;23667:112;:::o;1276:87::-;1322:7;1349:6;;;;;;;;;;;1342:13;;1276:87;:::o;25372:620::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25667:27:::1;25697:106;25713:6;25720:8;25729:9;25739:12;25752;25765:3;25769:9;25779:12;25792:10;25697:15;:106::i;:::-;25667:136;;25810:25;25831:3;25810:20;:25::i;:::-;25860:3;:10;;;25846:140;25871:3;:12;;;25884:3;:13;;;25898:3;:16;;;25915:3;:16;;;25932:3;:7;;;25940:3;:13;;;25954:3;:16;;;25971:3;:14;;;25846:140;;;;;;;;;;;;;:::i;:::-;;;;;;;;25660:332;25372:620:::0;;;;;;;;;:::o;24381:125::-;24454:7;24476:24;24491:8;24476:14;:24::i;:::-;24469:31;;24381:125;;;:::o;26618:369::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26830:72:::1;26855:6;26862:9;26872:11;26884:17;26830:24;:72::i;:::-;26934:6;26914:67;26941:9;26951:11;26963:17;26914:67;;;;;;;;:::i;:::-;;;;;;;;26618:369:::0;;;;:::o;29416:679::-;29519:27;29555:29;29593:35;29642:39;29684:40;29716:7;29684:31;:40::i;:::-;29642:82;;29759:7;:14;29745:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29733:41;;29811:7;:14;29797:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29783:43;;29869:7;:14;29855:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29835:49;;29897:9;29893:197;29912:7;:14;29910:1;:16;29893:197;;;29957:7;29965:1;29957:10;;;;;;;;:::i;:::-;;;;;;;;:17;;;29942:9;29952:1;29942:12;;;;;;;;:::i;:::-;;;;;;;:32;;;;;30002:7;30010:1;30002:10;;;;;;;;:::i;:::-;;;;;;;;:19;;;29985:11;29997:1;29985:14;;;;;;;;:::i;:::-;;;;;;;:36;;;;;30055:7;30063:1;30055:10;;;;;;;;:::i;:::-;;;;;;;;:25;;;30032:17;30050:1;30032:20;;;;;;;;:::i;:::-;;;;;;;:48;;;;;29927:3;;;;;:::i;:::-;;;;29893:197;;;;29633:462;29416:679;;;;;:::o;28394:616::-;28474:14;28497:16;28522:17;28548:20;28577;28606:11;28626:17;28652:20;28681:18;28708;28735;28761:28;28792:30;28814:7;28792:21;:30::i;:::-;28761:61;;28837:4;:11;;;28849:4;:13;;;28863:4;:14;;;28878:4;:17;;;28896:4;:17;;;28914:4;:8;;;28923:4;:14;;;28938:4;:17;;;28956:4;:15;;;28972:4;:15;;;28988:4;:15;;;28829:175;;;;;;;;;;;;;;;;;;;;;;;28394:616;;;;;;;;;;;;;:::o;29016:392::-;29140:14;29163:16;29188:22;29224:41;29268:47;29299:7;29307;29268:30;:47::i;:::-;29224:91;;29332:12;:19;;;29352:12;:21;;;29374:12;:27;;;29324:78;;;;;;;29016:392;;;;;:::o;24928:438::-;24994:35;25030:21;25059:44;25107:25;:23;:25::i;:::-;25059:73;;25173:3;:10;25159:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25139:45;;25211:3;:10;25200:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25191:31;;25233:9;25229:132;25250:3;:10;25247:1;:13;25229:132;;;25298:3;25302:1;25298:6;;;;;;;;:::i;:::-;;;;;;;;:22;;;25275:17;25293:1;25275:20;;;;;;;;:::i;:::-;;;;;;;:45;;;;;;;;;;;25341:3;25345:1;25341:6;;;;;;;;:::i;:::-;;;;;;;;:12;;;25329:6;25336:1;25329:9;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;25262:3;;;;;:::i;:::-;;;;25229:132;;;;25052:314;24928:438;;:::o;24061:115::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24125:17:::1;24135:6;24125:9;:17::i;:::-;24154:16;24163:6;24154:16;;;;;;:::i;:::-;;;;;;;;24061:115:::0;:::o;23783:181::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23871:38:::1;23892:16;23871:20;:38::i;:::-;23921:37;23941:16;23921:37;;;;;;:::i;:::-;;;;;;;;23783:181:::0;:::o;1657:281::-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1780:1:::1;1760:22;;:8;:22;;::::0;1738:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1893:8;1864:38;;1885:6;;;;;;;;;;;1864:38;;;;;;;;;;;;1922:8;1913:6;;:17;;;;;;;;;;;;;;;;;;1657:281:::0;:::o;703:98::-;756:7;783:10;776:17;;703:98;:::o;7176:257::-;7287:1;7278:8;:10;:40;;;;;7316:1;7292:26;;:14;:26;;;;7278:40;7270:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;7413:14;7384:18;:28;7403:8;7384:28;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;7176:257;;:::o;7583:508::-;7714:1;7683:33;;:21;:33;;;7675:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;7777:11;7793:10;7808:13;7850:28;7856:21;7850:5;:28::i;:::-;7826:52;;;;;;;;;;;;7886:6;7883:202;;;7938:4;7900:22;7923:5;7900:29;;;;;;;;:::i;:::-;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;7883:202;;;7959:22;7987:91;;;;;;;;8049:21;7987:91;;;;;;8020:4;7987:91;;;;;7959:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7883:202;7670:421;;;7583:508;:::o;27301:540::-;27541:36;;:::i;:::-;27599:236;;;;;;;;27633:6;27599:236;;;;27658:9;27599:236;;;;27689:12;27599:236;;;;27723:12;27599:236;;;;27754:9;27599:236;;;;;;27785:12;27599:236;;;;27817:10;27599:236;;;27585:250;;27301:540;;;;;;;;;:::o;12040:937::-;12171:1;12151:12;:19;;;:21;12143:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12222:34;12259:5;:26;12265:12;:19;;;12259:26;;;;;;;;;;;12222:63;;12318:1;12301:9;:16;;;:18;12293:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12387:1;12364:12;:22;;;:24;12361:90;;;12420:12;:22;;;12398:9;:19;;:44;;;;12361:90;12487:1;12461:12;:25;;;:27;12458:100;;;12524:12;:25;;;12499:9;:22;;:50;;;;12458:100;12592:1;12568:12;:23;;;:25;12565:94;;;12627:12;:23;;;12604:9;:20;;:46;;;;12565:94;12694:1;12668:12;:25;;;:27;12665:100;;;12731:12;:25;;;12706:9;:22;;:50;;;;12665:100;12801:1;12775:12;:25;;;:27;12772:100;;;12838:12;:25;;;12813:9;:22;;:50;;;;12772:100;12901:12;:22;;;12879:9;:19;;;:44;;;;;;;;;;;;;;;;;;12954:15;12931:9;:20;;:38;;;;12135:842;12040:937;:::o;2567:103::-;2620:7;2646:16;;;;;;;;;;;2639:23;;2567:103;:::o;406:150::-;186:1;464:7;;:19;456:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;186:1;530:7;:18;;;;406:150::o;5671:328::-;5722:15;5740:22;5751:10;5740;:22::i;:::-;5722:40;;5784:1;5777:6;:8;5769:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5854:6;5843:7;:17;;5835:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;5907:42;5925:10;5936:5;5942:6;5907:17;:42::i;:::-;;5956:37;5975:10;5986:6;5956:18;:37::i;:::-;5715:284;5671:328;:::o;564:79::-;142:1;613:7;:22;;;;564:79::o;2400:::-;2443:4;2466:5;;;;;;;;;;;2459:12;;2400:79;:::o;2678:204::-;2786:1;2760:28;;:16;:28;;;2752:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2858:16;2841;;:33;;;;;;;;;;;;;;;;;;2678:204;:::o;26995:300::-;27133:26;;:::i;:::-;27176:113;;;;;;;;27205:6;27176:113;;;;27227:6;27176:113;;;;27252:9;27176:113;;;;27276:5;27176:113;;;27167:122;;26995:300;;;;;;:::o;14718:2510::-;14801:13;14815:17;14833:18;14861:34;14898:5;:27;14904:13;:20;;;14898:27;;;;;;;;;;;14861:64;;14956:1;14939:9;:16;;;:18;14931:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15020:9;:22;;;15002:15;:40;;:82;;;;;15064:9;:20;;;15046:15;:38;;15002:82;14994:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;15159:9;:22;;;15133:13;:23;;;:48;;:100;;;;;15211:9;:22;;;15185:13;:23;;;:48;;15133:100;15125:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;15280:24;15307:275;;;;;;;;15333:13;:20;;;15307:275;;;;15369:9;:18;;;15307:275;;;;15399:10;15307:275;;;;;;15423:13;:20;;;15307:275;;;;15460:13;:23;;;15307:275;;;;15496:13;:19;;;15307:275;;;;15563:9;:13;;;15307:275;;;;15530:9;:22;;;15307:275;;;15280:302;;15590:29;15603:5;:15;;;15590:12;:29::i;:::-;15626:48;15677:11;:33;15689:13;:20;;;15677:33;;;;;;;;;;;15626:84;;15715:37;15780:14;:21;;;;15755:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15715:87;;15807:11;15835:9;15831:373;15851:14;:21;;;;15848:1;:24;15831:373;;;15885:41;15929:14;15944:1;15929:17;;;;;;;;:::i;:::-;;;;;;;;;;;;15885:61;;15968:148;;;;;;;;16002:11;:18;;;15968:148;;;;16038:11;:20;;;15968:148;;;;16082:11;:26;;;15968:148;;;15953:9;15963:1;15953:12;;;;;;;;:::i;:::-;;;;;;;:163;;;;16148:13;:20;;;16126:11;:18;;;:42;16123:76;;16187:4;16178:13;;16123:76;15878:326;15873:4;;;;;:::i;:::-;;;;15831:373;;;;16216:6;16208:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16266:15;16284;16266:33;;16304:11;16320:19;16344:38;16387:26;16416:34;16431:9;:18;;;16416:14;:34::i;:::-;16387:63;;16491:1;16463:30;;:18;:30;;;16455:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;16599:18;16580:47;;;16628:5;16634:9;16580:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16546:98;;;;;;;;;;;;16667:5;16657:15;;:6;:15;;;16649:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;16717:20;16728:8;16717:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:20::i;:::-;16709:28;;16756:320;;;;;;;;16786:5;16756:320;;;;16806:5;:12;;;16756:320;;;;16838:10;16756:320;;;;;;16863:5;:12;;;16756:320;;;;16892:11;16756:320;;;;16921:5;:15;;;16756:320;;;;16951:5;16756:320;;;;;;16973:1;16756:320;;;;16994:1;16756:320;;;;17016:1;16756:320;;;;17036:7;16756:320;;;;17062:7;16756:320;;;16742:4;:11;16747:5;16742:11;;;;;;;;;;;:334;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17084:46;17104:14;17119:10;17084:19;:46::i;:::-;17149:7;17136:20;;17174:11;17162:23;;17192:31;17205:5;17211:11;17192:12;:31::i;:::-;14852:2376;;;;;;;;;;14718:2510;;;;;:::o;17233:119::-;17293:29;;:::i;:::-;17336:4;:11;17341:5;17336:11;;;;;;;;;;;17329:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17233:119;;;:::o;18450:641::-;18598:9;18594:494;18615:8;;:15;;18613:1;:17;18594:494;;;18644:33;18680:4;:17;18685:8;;18694:1;18685:11;;;;;;;:::i;:::-;;;;;;;;18680:17;;;;;;;;;;;18644:53;;18709:9;:16;;;;;;;;;;;;18705:377;;18753:4;18736:9;:16;;;:21;;;;;;;;;;;;;;;;;;18788:15;18767:9;:18;;:36;;;;18836:15;18813:9;:20;;:38;;;;18885:9;;18895:1;18885:12;;;;;;;:::i;:::-;;;;;;;;18861:9;:21;;:36;;;;18932:9;;18942:1;18932:12;;;;;;;:::i;:::-;;;;;;;;18907:9;:22;;:37;;;;18961:17;18996:9;;19006:1;18996:12;;;;;;;:::i;:::-;;;;;;;;18981:9;;18991:1;18981:12;;;;;;;:::i;:::-;;;;;;;;:27;;;;:::i;:::-;18961:47;;19018:55;19036:9;:21;;;;;;;;;;;;19058:4;19063:9;19018:17;:55::i;:::-;;18726:356;18705:377;18636:452;18632:3;;;;;:::i;:::-;;;;18594:494;;;;18450:641;;;;;;:::o;5481:112::-;5537:7;5559:14;:20;5574:4;5559:20;;;;;;;;;;;;;;;:28;;;5552:35;;5481:112;;;:::o;8566:369::-;8697:1;8666:33;;:21;:33;;;8658:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;8760:11;8776:10;8791:13;8833:28;8839:21;8833:5;:28::i;:::-;8809:52;;;;;;;;;;;;8869:6;8866:66;;;8921:5;8883:22;8906:5;8883:29;;;;;;;;:::i;:::-;;;;;;;;;:35;;;:43;;;;;;;;;;;;;;;;;;8866:66;8653:282;;;8566:369;:::o;2890:105::-;2944:7;2970:17;;;;;;;;;;;2963:24;;2890:105;:::o;25998:612::-;26284:27;;:::i;:::-;26327:277;;;;;;;;26360:6;26327:277;;;;26384:8;26327:277;;;;26411:9;26327:277;;;;26442:12;26327:277;;;;26476:12;26327:277;;;;26501:3;26327:277;;;;26523:9;26327:277;;;;;;26554:12;26327:277;;;;26586:10;26327:277;;;26321:283;;25998:612;;;;;;;;;;;:::o;11159:873::-;11286:1;11267:11;:18;;;:20;11259:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11337:34;11374:5;:25;11380:11;:18;;;11374:25;;;;;;;;;;;11337:62;;11433:1;11415:9;:16;;;:19;11407:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11500:11;:18;;;11481:9;:16;;:37;;;;11547:11;:20;;;11526:9;:18;;:41;;;;11597:11;:21;;;11575:9;:19;;:43;;;;11651:11;:24;;;11626:9;:22;;:49;;;;11699:11;:15;;;11683:9;:13;;:31;;;;11745:11;:22;;;11722:9;:20;;:45;;;;11797:11;:21;;;11775:9;:19;;;:43;;;;;;;;;;;;;;;;;;11851:11;:24;;;11826:9;:22;;:49;;;;11908:11;:24;;;11883:9;:22;;:49;;;;11963:15;11940:9;:20;;:38;;;;12009:15;11986:9;:20;;:38;;;;11251:781;11159:873;:::o;7439:138::-;7519:7;7543:18;:28;7562:8;7543:28;;;;;;;;;;;;;;;;;;;;;7536:35;;7439:138;;;:::o;12987:945::-;13210:1;13203:6;:8;13195:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;13261:34;13298:5;:13;13304:6;13298:13;;;;;;;;;;;13261:50;;13344:1;13327:9;:16;;;:18;13319:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13387:48;13438:11;:19;13450:6;13438:19;;;;;;;;;;;13387:70;;13497:1;13473:15;:22;;;;:25;13465:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13578:11;:18;13560:9;:16;:36;:81;;;;;13617:17;:24;13598:9;:16;:43;13560:81;13552:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;13702:9;13698:221;13718:9;:16;13716:1;:18;13698:221;;;13750:15;13771:138;;;;;;;;13810:9;13820:1;13810:12;;;;;;;;:::i;:::-;;;;;;;;13771:138;;;;13841:11;13853:1;13841:14;;;;;;;;:::i;:::-;;;;;;;;13771:138;;;;13880:17;13898:1;13880:20;;;;;;;;:::i;:::-;;;;;;;;13771:138;;;13750:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13736:3;;;;;:::i;:::-;;;;13698:221;;;;13187:745;;12987:945;;;;:::o;14548:165::-;14628:39;14685:11;:20;14697:7;14685:20;;;;;;;;;;;14677:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14548:165;;;:::o;13940:147::-;14009:34;;:::i;:::-;14066:5;:13;14072:6;14066:13;;;;;;;;;;;14053:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13940:147;;;:::o;14095:445::-;14190:35;;:::i;:::-;14235:40;14279:11;:20;14291:7;14279:20;;;;;;;;;;;14235:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14312:9;14308:225;14329:7;:14;14326:1;:17;14308:225;;;14360:41;14404:7;14412:1;14404:10;;;;;;;;:::i;:::-;;;;;;;;14360:54;;14451:7;14428:12;:19;;;:30;14425:99;;14482:12;14472:22;;14507:5;;;14425:99;14349:184;14345:3;;;;;:::i;:::-;;;;14308:225;;;;14226:314;14095:445;;;;:::o;8941:146::-;9014:27;9059:22;9052:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8941:146;:::o;2487:72::-;2545:6;2537:5;;:14;;;;;;;;;;;;;;;;;;2487:72;:::o;3003:209::-;3114:1;3087:29;;:17;:29;;;3079:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3187:17;3169;;:35;;;;;;;;;;;;;;;;;;3003:209;:::o;8097:463::-;8167:11;8180:10;8192:13;8252:1;8221:22;:29;;;;:32;8218:77;;8272:5;8278;8284:1;8264:22;;;;;;;;8218:77;8305:9;8301:252;8324:22;:29;;;;8320:1;:33;8301:252;;;8368:36;8407:22;8430:1;8407:25;;;;;;;;:::i;:::-;;;;;;;;;8368:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8475:16;8444:47;;:11;:27;;;:47;;;8441:105;;8511:4;8516:11;:17;;;8534:1;8503:33;;;;;;;;;;8441:105;8359:194;8355:3;;;;;:::i;:::-;;;;8301:252;;;;8097:463;;;;;;:::o;4665:810::-;4751:18;4799:1;4785:16;;:4;:16;;;4777:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4872:1;4865:6;:8;4857:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4930:35;4968:14;:20;4983:4;4968:20;;;;;;;;;;;;;;;4930:58;;5019:1;4998:7;:18;;;:22;4995:181;;5052:4;5030:7;:19;;;:26;;;;;;;;;;;;;;;;;;5081:1;5065:7;:15;;:17;;;;5110:15;5091:7;:18;;:34;;;;5153:15;5134:7;:18;;:34;;;;4995:181;5185:6;5182:210;;;5232:6;5214:7;:15;;;:24;;;;:::i;:::-;5201:37;;5182:210;;;5284:6;5267:7;:15;;;:23;;5259:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;5378:6;5360:7;:15;;;:24;;;;:::i;:::-;5346:38;;5182:210;5416:10;5398:7;:15;;:28;;;;5454:15;5433:7;:18;;:36;;;;4770:705;4665:810;;;;;:::o;3746:596::-;3841:1;3829:14;;:2;:14;;;3821:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;3911:1;3904:6;:8;3896:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3968:5;;;;;;;;;;;3965:370;;;4072:6;4010:16;;;;;;;;;;;3995:42;;;4038:17;;;;;;;;;;;4064:4;3995:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:83;;3987:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;4158:16;;;;;;;;;;;4143:45;;;4189:17;;;;;;;;;;;4207:2;4210:6;4143:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3965:370;;;4264:16;;;;;;;;;;;4249:45;;;4295:17;;;;;;;;;;;4313:2;4316:6;4249:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3965:370;3746:596;;:::o;3220:518::-;3292:1;3285:6;:8;3277:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3348:5;;;;;;;;;;;3345:376;;;3445:6;3390:16;;;;;;;;;;;3375:42;;;3418:10;3437:4;3375:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;3367:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;3531:16;;;;;;;;;;;3516:45;;;3562:10;3573:17;;;;;;;;;;;3591:6;3516:82;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:376;;;3642:16;;;;;;;;;;;3627:45;;;3673:10;3684:17;;;;;;;;;;;3702:6;3627:82;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:376;3220:518;:::o;6193:200::-;6252:7;6267:16;6286:9;6296:6;6286:17;;;;;;:::i;:::-;;;;;;;;;;;;;;6267:36;;6331:1;6321:8;:11;;;;:::i;:::-;6310:22;;6357:8;6339:9;6349:6;6339:17;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;;6379:8;6372:15;;;6193:200;;;:::o;17949:489::-;18078:9;18074:360;18095:7;:14;;;;18093:1;:16;18074:360;;;18122:37;18162:7;18170:1;18162:10;;;;;;;;:::i;:::-;;;;;;;;;;;;18122:50;;18183:9;18179:250;18200:9;:16;18198:1;:18;18179:250;;;18232:28;18263:9;18273:1;18263:12;;;;;;;;:::i;:::-;;;;;;;;18232:43;;18305:3;:10;;;18287:7;:14;;;:28;18284:138;;18346:3;:12;;;18327:7;:16;;:31;;;;18394:3;:18;;;18369:7;:22;;:43;;;;18284:138;18223:206;18218:3;;;;;:::i;:::-;;;;18179:250;;;;18115:319;18111:3;;;;;:::i;:::-;;;;18074:360;;;;17949:489;;:::o;17358:583::-;17438:50;17491:25;:23;:25::i;:::-;17438:78;;17559:1;17528:22;:29;:32;17525:411;;;17576:9;17572:355;17594:22;:29;17591:1;:32;17572:355;;;17642:36;17681:22;17704:1;17681:25;;;;;;;;:::i;:::-;;;;;;;;17642:64;;17722:11;:17;;;17719:191;;;17777:11;:27;;;17755:62;;;17818:5;:10;;;17829:5;:12;;;17842:5;:14;;;17857:5;:12;;;17870:5;:15;;;17886:9;17755:141;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17719:191;17629:298;17625:3;;;;;:::i;:::-;;;;17572:355;;;;17525:411;17431:510;17358:583;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:126::-;727:7;767:42;760:5;756:54;745:65;;690:126;;;:::o;822:96::-;859:7;888:24;906:5;888:24;:::i;:::-;877:35;;822:96;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:329::-;1736:6;1785:2;1773:9;1764:7;1760:23;1756:32;1753:119;;;1791:79;;:::i;:::-;1753:119;1911:1;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1882:117;1677:329;;;;:::o;2012:90::-;2046:7;2089:5;2082:13;2075:21;2064:32;;2012:90;;;:::o;2108:116::-;2178:21;2193:5;2178:21;:::i;:::-;2171:5;2168:32;2158:60;;2214:1;2211;2204:12;2158:60;2108:116;:::o;2230:133::-;2273:5;2311:6;2298:20;2289:29;;2327:30;2351:5;2327:30;:::i;:::-;2230:133;;;;:::o;2369:1197::-;2479:6;2487;2495;2503;2511;2519;2527;2576:3;2564:9;2555:7;2551:23;2547:33;2544:120;;;2583:79;;:::i;:::-;2544:120;2703:1;2728:53;2773:7;2764:6;2753:9;2749:22;2728:53;:::i;:::-;2718:63;;2674:117;2830:2;2856:53;2901:7;2892:6;2881:9;2877:22;2856:53;:::i;:::-;2846:63;;2801:118;2958:2;2984:53;3029:7;3020:6;3009:9;3005:22;2984:53;:::i;:::-;2974:63;;2929:118;3086:2;3112:53;3157:7;3148:6;3137:9;3133:22;3112:53;:::i;:::-;3102:63;;3057:118;3214:3;3241:50;3283:7;3274:6;3263:9;3259:22;3241:50;:::i;:::-;3231:60;;3185:116;3340:3;3367:53;3412:7;3403:6;3392:9;3388:22;3367:53;:::i;:::-;3357:63;;3311:119;3469:3;3496:53;3541:7;3532:6;3521:9;3517:22;3496:53;:::i;:::-;3486:63;;3440:119;2369:1197;;;;;;;;;;:::o;3572:118::-;3659:24;3677:5;3659:24;:::i;:::-;3654:3;3647:37;3572:118;;:::o;3696:222::-;3789:4;3827:2;3816:9;3812:18;3804:26;;3840:71;3908:1;3897:9;3893:17;3884:6;3840:71;:::i;:::-;3696:222;;;;:::o;3924:329::-;3983:6;4032:2;4020:9;4011:7;4007:23;4003:32;4000:119;;;4038:79;;:::i;:::-;4000:119;4158:1;4183:53;4228:7;4219:6;4208:9;4204:22;4183:53;:::i;:::-;4173:63;;4129:117;3924:329;;;;:::o;4259:109::-;4340:21;4355:5;4340:21;:::i;:::-;4335:3;4328:34;4259:109;;:::o;4374:210::-;4461:4;4499:2;4488:9;4484:18;4476:26;;4512:65;4574:1;4563:9;4559:17;4550:6;4512:65;:::i;:::-;4374:210;;;;:::o;4590:765::-;4676:6;4684;4692;4700;4749:3;4737:9;4728:7;4724:23;4720:33;4717:120;;;4756:79;;:::i;:::-;4717:120;4876:1;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4847:117;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4590:765;;;;;;;:::o;5361:118::-;5448:24;5466:5;5448:24;:::i;:::-;5443:3;5436:37;5361:118;;:::o;5485:1433::-;5882:4;5920:3;5909:9;5905:19;5897:27;;5934:71;6002:1;5991:9;5987:17;5978:6;5934:71;:::i;:::-;6015:72;6083:2;6072:9;6068:18;6059:6;6015:72;:::i;:::-;6097;6165:2;6154:9;6150:18;6141:6;6097:72;:::i;:::-;6179;6247:2;6236:9;6232:18;6223:6;6179:72;:::i;:::-;6261:73;6329:3;6318:9;6314:19;6305:6;6261:73;:::i;:::-;6344;6412:3;6401:9;6397:19;6388:6;6344:73;:::i;:::-;6427:67;6489:3;6478:9;6474:19;6465:6;6427:67;:::i;:::-;6504:73;6572:3;6561:9;6557:19;6548:6;6504:73;:::i;:::-;6587;6655:3;6644:9;6640:19;6631:6;6587:73;:::i;:::-;6670;6738:3;6727:9;6723:19;6714:6;6670:73;:::i;:::-;6753:74;6822:3;6811:9;6807:19;6797:7;6753:74;:::i;:::-;6837;6906:3;6895:9;6891:19;6881:7;6837:74;:::i;:::-;5485:1433;;;;;;;;;;;;;;;:::o;6924:117::-;7033:1;7030;7023:12;7047:117;7156:1;7153;7146:12;7170:117;7279:1;7276;7269:12;7310:568;7383:8;7393:6;7443:3;7436:4;7428:6;7424:17;7420:27;7410:122;;7451:79;;:::i;:::-;7410:122;7564:6;7551:20;7541:30;;7594:18;7586:6;7583:30;7580:117;;;7616:79;;:::i;:::-;7580:117;7730:4;7722:6;7718:17;7706:29;;7784:3;7776:4;7768:6;7764:17;7754:8;7750:32;7747:41;7744:128;;;7791:79;;:::i;:::-;7744:128;7310:568;;;;;:::o;7884:1309::-;8042:6;8050;8058;8066;8074;8082;8131:2;8119:9;8110:7;8106:23;8102:32;8099:119;;;8137:79;;:::i;:::-;8099:119;8285:1;8274:9;8270:17;8257:31;8315:18;8307:6;8304:30;8301:117;;;8337:79;;:::i;:::-;8301:117;8450:80;8522:7;8513:6;8502:9;8498:22;8450:80;:::i;:::-;8432:98;;;;8228:312;8607:2;8596:9;8592:18;8579:32;8638:18;8630:6;8627:30;8624:117;;;8660:79;;:::i;:::-;8624:117;8773:80;8845:7;8836:6;8825:9;8821:22;8773:80;:::i;:::-;8755:98;;;;8550:313;8930:2;8919:9;8915:18;8902:32;8961:18;8953:6;8950:30;8947:117;;;8983:79;;:::i;:::-;8947:117;9096:80;9168:7;9159:6;9148:9;9144:22;9096:80;:::i;:::-;9078:98;;;;8873:313;7884:1309;;;;;;;;:::o;9199:222::-;9292:4;9330:2;9319:9;9315:18;9307:26;;9343:71;9411:1;9400:9;9396:17;9387:6;9343:71;:::i;:::-;9199:222;;;;:::o;9427:1489::-;9555:6;9563;9571;9579;9587;9595;9603;9611;9619;9668:3;9656:9;9647:7;9643:23;9639:33;9636:120;;;9675:79;;:::i;:::-;9636:120;9795:1;9820:53;9865:7;9856:6;9845:9;9841:22;9820:53;:::i;:::-;9810:63;;9766:117;9922:2;9948:53;9993:7;9984:6;9973:9;9969:22;9948:53;:::i;:::-;9938:63;;9893:118;10050:2;10076:53;10121:7;10112:6;10101:9;10097:22;10076:53;:::i;:::-;10066:63;;10021:118;10178:2;10204:53;10249:7;10240:6;10229:9;10225:22;10204:53;:::i;:::-;10194:63;;10149:118;10306:3;10333:53;10378:7;10369:6;10358:9;10354:22;10333:53;:::i;:::-;10323:63;;10277:119;10435:3;10462:53;10507:7;10498:6;10487:9;10483:22;10462:53;:::i;:::-;10452:63;;10406:119;10564:3;10591:50;10633:7;10624:6;10613:9;10609:22;10591:50;:::i;:::-;10581:60;;10535:116;10690:3;10717:53;10762:7;10753:6;10742:9;10738:22;10717:53;:::i;:::-;10707:63;;10661:119;10819:3;10846:53;10891:7;10882:6;10871:9;10867:22;10846:53;:::i;:::-;10836:63;;10790:119;9427:1489;;;;;;;;;;;:::o;10922:102::-;10963:6;11014:2;11010:7;11005:2;10998:5;10994:14;10990:28;10980:38;;10922:102;;;:::o;11030:180::-;11078:77;11075:1;11068:88;11175:4;11172:1;11165:15;11199:4;11196:1;11189:15;11216:281;11299:27;11321:4;11299:27;:::i;:::-;11291:6;11287:40;11429:6;11417:10;11414:22;11393:18;11381:10;11378:34;11375:62;11372:88;;;11440:18;;:::i;:::-;11372:88;11480:10;11476:2;11469:22;11259:238;11216:281;;:::o;11503:129::-;11537:6;11564:20;;:::i;:::-;11554:30;;11593:33;11621:4;11613:6;11593:33;:::i;:::-;11503:129;;;:::o;11638:311::-;11715:4;11805:18;11797:6;11794:30;11791:56;;;11827:18;;:::i;:::-;11791:56;11877:4;11869:6;11865:17;11857:25;;11937:4;11931;11927:15;11919:23;;11638:311;;;:::o;11972:710::-;12068:5;12093:81;12109:64;12166:6;12109:64;:::i;:::-;12093:81;:::i;:::-;12084:90;;12194:5;12223:6;12216:5;12209:21;12257:4;12250:5;12246:16;12239:23;;12310:4;12302:6;12298:17;12290:6;12286:30;12339:3;12331:6;12328:15;12325:122;;;12358:79;;:::i;:::-;12325:122;12473:6;12456:220;12490:6;12485:3;12482:15;12456:220;;;12565:3;12594:37;12627:3;12615:10;12594:37;:::i;:::-;12589:3;12582:50;12661:4;12656:3;12652:14;12645:21;;12532:144;12516:4;12511:3;12507:14;12500:21;;12456:220;;;12460:21;12074:608;;11972:710;;;;;:::o;12705:370::-;12776:5;12825:3;12818:4;12810:6;12806:17;12802:27;12792:122;;12833:79;;:::i;:::-;12792:122;12950:6;12937:20;12975:94;13065:3;13057:6;13050:4;13042:6;13038:17;12975:94;:::i;:::-;12966:103;;12782:293;12705:370;;;;:::o;13081:1395::-;13242:6;13250;13258;13266;13315:3;13303:9;13294:7;13290:23;13286:33;13283:120;;;13322:79;;:::i;:::-;13283:120;13442:1;13467:53;13512:7;13503:6;13492:9;13488:22;13467:53;:::i;:::-;13457:63;;13413:117;13597:2;13586:9;13582:18;13569:32;13628:18;13620:6;13617:30;13614:117;;;13650:79;;:::i;:::-;13614:117;13755:78;13825:7;13816:6;13805:9;13801:22;13755:78;:::i;:::-;13745:88;;13540:303;13910:2;13899:9;13895:18;13882:32;13941:18;13933:6;13930:30;13927:117;;;13963:79;;:::i;:::-;13927:117;14068:78;14138:7;14129:6;14118:9;14114:22;14068:78;:::i;:::-;14058:88;;13853:303;14223:2;14212:9;14208:18;14195:32;14254:18;14246:6;14243:30;14240:117;;;14276:79;;:::i;:::-;14240:117;14381:78;14451:7;14442:6;14431:9;14427:22;14381:78;:::i;:::-;14371:88;;14166:303;13081:1395;;;;;;;:::o;14482:114::-;14549:6;14583:5;14577:12;14567:22;;14482:114;;;:::o;14602:184::-;14701:11;14735:6;14730:3;14723:19;14775:4;14770:3;14766:14;14751:29;;14602:184;;;;:::o;14792:132::-;14859:4;14882:3;14874:11;;14912:4;14907:3;14903:14;14895:22;;14792:132;;;:::o;14930:108::-;15007:24;15025:5;15007:24;:::i;:::-;15002:3;14995:37;14930:108;;:::o;15044:179::-;15113:10;15134:46;15176:3;15168:6;15134:46;:::i;:::-;15212:4;15207:3;15203:14;15189:28;;15044:179;;;;:::o;15229:113::-;15299:4;15331;15326:3;15322:14;15314:22;;15229:113;;;:::o;15378:732::-;15497:3;15526:54;15574:5;15526:54;:::i;:::-;15596:86;15675:6;15670:3;15596:86;:::i;:::-;15589:93;;15706:56;15756:5;15706:56;:::i;:::-;15785:7;15816:1;15801:284;15826:6;15823:1;15820:13;15801:284;;;15902:6;15896:13;15929:63;15988:3;15973:13;15929:63;:::i;:::-;15922:70;;16015:60;16068:6;16015:60;:::i;:::-;16005:70;;15861:224;15848:1;15845;15841:9;15836:14;;15801:284;;;15805:14;16101:3;16094:10;;15502:608;;;15378:732;;;;:::o;16116:895::-;16415:4;16453:2;16442:9;16438:18;16430:26;;16502:9;16496:4;16492:20;16488:1;16477:9;16473:17;16466:47;16530:108;16633:4;16624:6;16530:108;:::i;:::-;16522:116;;16685:9;16679:4;16675:20;16670:2;16659:9;16655:18;16648:48;16713:108;16816:4;16807:6;16713:108;:::i;:::-;16705:116;;16868:9;16862:4;16858:20;16853:2;16842:9;16838:18;16831:48;16896:108;16999:4;16990:6;16896:108;:::i;:::-;16888:116;;16116:895;;;;;;:::o;17017:1320::-;17385:4;17423:3;17412:9;17408:19;17400:27;;17437:71;17505:1;17494:9;17490:17;17481:6;17437:71;:::i;:::-;17518:72;17586:2;17575:9;17571:18;17562:6;17518:72;:::i;:::-;17600;17668:2;17657:9;17653:18;17644:6;17600:72;:::i;:::-;17682;17750:2;17739:9;17735:18;17726:6;17682:72;:::i;:::-;17764:73;17832:3;17821:9;17817:19;17808:6;17764:73;:::i;:::-;17847;17915:3;17904:9;17900:19;17891:6;17847:73;:::i;:::-;17930:67;17992:3;17981:9;17977:19;17968:6;17930:67;:::i;:::-;18007:73;18075:3;18064:9;18060:19;18051:6;18007:73;:::i;:::-;18090;18158:3;18147:9;18143:19;18134:6;18090:73;:::i;:::-;18173;18241:3;18230:9;18226:19;18217:6;18173:73;:::i;:::-;18256:74;18325:3;18314:9;18310:19;18300:7;18256:74;:::i;:::-;17017:1320;;;;;;;;;;;;;;:::o;18343:474::-;18411:6;18419;18468:2;18456:9;18447:7;18443:23;18439:32;18436:119;;;18474:79;;:::i;:::-;18436:119;18594:1;18619:53;18664:7;18655:6;18644:9;18640:22;18619:53;:::i;:::-;18609:63;;18565:117;18721:2;18747:53;18792:7;18783:6;18772:9;18768:22;18747:53;:::i;:::-;18737:63;;18692:118;18343:474;;;;;:::o;18823:442::-;18972:4;19010:2;18999:9;18995:18;18987:26;;19023:71;19091:1;19080:9;19076:17;19067:6;19023:71;:::i;:::-;19104:72;19172:2;19161:9;19157:18;19148:6;19104:72;:::i;:::-;19186;19254:2;19243:9;19239:18;19230:6;19186:72;:::i;:::-;18823:442;;;;;;:::o;19271:114::-;19338:6;19372:5;19366:12;19356:22;;19271:114;;;:::o;19391:184::-;19490:11;19524:6;19519:3;19512:19;19564:4;19559:3;19555:14;19540:29;;19391:184;;;;:::o;19581:132::-;19648:4;19671:3;19663:11;;19701:4;19696:3;19692:14;19684:22;;19581:132;;;:::o;19719:108::-;19796:24;19814:5;19796:24;:::i;:::-;19791:3;19784:37;19719:108;;:::o;19833:179::-;19902:10;19923:46;19965:3;19957:6;19923:46;:::i;:::-;20001:4;19996:3;19992:14;19978:28;;19833:179;;;;:::o;20018:113::-;20088:4;20120;20115:3;20111:14;20103:22;;20018:113;;;:::o;20167:732::-;20286:3;20315:54;20363:5;20315:54;:::i;:::-;20385:86;20464:6;20459:3;20385:86;:::i;:::-;20378:93;;20495:56;20545:5;20495:56;:::i;:::-;20574:7;20605:1;20590:284;20615:6;20612:1;20609:13;20590:284;;;20691:6;20685:13;20718:63;20777:3;20762:13;20718:63;:::i;:::-;20711:70;;20804:60;20857:6;20804:60;:::i;:::-;20794:70;;20650:224;20637:1;20634;20630:9;20625:14;;20590:284;;;20594:14;20890:3;20883:10;;20291:608;;;20167:732;;;;:::o;20905:111::-;20969:6;21003:5;20997:12;20987:22;;20905:111;;;:::o;21022:181::-;21118:11;21152:6;21147:3;21140:19;21192:4;21187:3;21183:14;21168:29;;21022:181;;;;:::o;21209:129::-;21273:4;21296:3;21288:11;;21326:4;21321:3;21317:14;21309:22;;21209:129;;;:::o;21344:99::-;21415:21;21430:5;21415:21;:::i;:::-;21410:3;21403:34;21344:99;;:::o;21449:167::-;21512:10;21533:40;21569:3;21561:6;21533:40;:::i;:::-;21605:4;21600:3;21596:14;21582:28;;21449:167;;;;:::o;21622:110::-;21689:4;21721;21716:3;21712:14;21704:22;;21622:110;;;:::o;21762:708::-;21875:3;21904:51;21949:5;21904:51;:::i;:::-;21971:83;22047:6;22042:3;21971:83;:::i;:::-;21964:90;;22078:53;22125:5;22078:53;:::i;:::-;22154:7;22185:1;22170:275;22195:6;22192:1;22189:13;22170:275;;;22271:6;22265:13;22298:57;22351:3;22336:13;22298:57;:::i;:::-;22291:64;;22378:57;22428:6;22378:57;:::i;:::-;22368:67;;22230:215;22217:1;22214;22210:9;22205:14;;22170:275;;;22174:14;22461:3;22454:10;;21880:590;;;21762:708;;;;:::o;22476:622::-;22691:4;22729:2;22718:9;22714:18;22706:26;;22778:9;22772:4;22768:20;22764:1;22753:9;22749:17;22742:47;22806:108;22909:4;22900:6;22806:108;:::i;:::-;22798:116;;22961:9;22955:4;22951:20;22946:2;22935:9;22931:18;22924:48;22989:102;23086:4;23077:6;22989:102;:::i;:::-;22981:110;;22476:622;;;;;:::o;23104:323::-;23160:6;23209:2;23197:9;23188:7;23184:23;23180:32;23177:119;;;23215:79;;:::i;:::-;23177:119;23335:1;23360:50;23402:7;23393:6;23382:9;23378:22;23360:50;:::i;:::-;23350:60;;23306:114;23104:323;;;;:::o;23433:169::-;23517:11;23551:6;23546:3;23539:19;23591:4;23586:3;23582:14;23567:29;;23433:169;;;;:::o;23608:182::-;23748:34;23744:1;23736:6;23732:14;23725:58;23608:182;:::o;23796:366::-;23938:3;23959:67;24023:2;24018:3;23959:67;:::i;:::-;23952:74;;24035:93;24124:3;24035:93;:::i;:::-;24153:2;24148:3;24144:12;24137:19;;23796:366;;;:::o;24168:419::-;24334:4;24372:2;24361:9;24357:18;24349:26;;24421:9;24415:4;24411:20;24407:1;24396:9;24392:17;24385:47;24449:131;24575:4;24449:131;:::i;:::-;24441:139;;24168:419;;;:::o;24593:332::-;24714:4;24752:2;24741:9;24737:18;24729:26;;24765:71;24833:1;24822:9;24818:17;24809:6;24765:71;:::i;:::-;24846:72;24914:2;24903:9;24899:18;24890:6;24846:72;:::i;:::-;24593:332;;;;;:::o;24931:763::-;25158:4;25196:3;25185:9;25181:19;25173:27;;25210:71;25278:1;25267:9;25263:17;25254:6;25210:71;:::i;:::-;25291:72;25359:2;25348:9;25344:18;25335:6;25291:72;:::i;:::-;25373;25441:2;25430:9;25426:18;25417:6;25373:72;:::i;:::-;25455:66;25517:2;25506:9;25502:18;25493:6;25455:66;:::i;:::-;25531:73;25599:3;25588:9;25584:19;25575:6;25531:73;:::i;:::-;25614;25682:3;25671:9;25667:19;25658:6;25614:73;:::i;:::-;24931:763;;;;;;;;;:::o;25700:332::-;25821:4;25859:2;25848:9;25844:18;25836:26;;25872:71;25940:1;25929:9;25925:17;25916:6;25872:71;:::i;:::-;25953:72;26021:2;26010:9;26006:18;25997:6;25953:72;:::i;:::-;25700:332;;;;;:::o;26038:775::-;26271:4;26309:3;26298:9;26294:19;26286:27;;26323:71;26391:1;26380:9;26376:17;26367:6;26323:71;:::i;:::-;26404:72;26472:2;26461:9;26457:18;26448:6;26404:72;:::i;:::-;26486;26554:2;26543:9;26539:18;26530:6;26486:72;:::i;:::-;26568;26636:2;26625:9;26621:18;26612:6;26568:72;:::i;:::-;26650:73;26718:3;26707:9;26703:19;26694:6;26650:73;:::i;:::-;26733;26801:3;26790:9;26786:19;26777:6;26733:73;:::i;:::-;26038:775;;;;;;;;;:::o;26819:117::-;26928:1;26925;26918:12;26942:98;27026:6;27021:3;27016;27003:30;26942:98;;;:::o;27076:537::-;27204:3;27225:86;27304:6;27299:3;27225:86;:::i;:::-;27218:93;;27335:66;27327:6;27324:78;27321:165;;;27405:79;;:::i;:::-;27321:165;27517:4;27509:6;27505:17;27495:27;;27532:43;27568:6;27563:3;27556:5;27532:43;:::i;:::-;27600:6;27595:3;27591:16;27584:23;;27076:537;;;;;:::o;27619:1066::-;27976:4;28014:3;28003:9;27999:19;27991:27;;28064:9;28058:4;28054:20;28050:1;28039:9;28035:17;28028:47;28092:118;28205:4;28196:6;28188;28092:118;:::i;:::-;28084:126;;28257:9;28251:4;28247:20;28242:2;28231:9;28227:18;28220:48;28285:118;28398:4;28389:6;28381;28285:118;:::i;:::-;28277:126;;28450:9;28444:4;28440:20;28435:2;28424:9;28420:18;28413:48;28478:118;28591:4;28582:6;28574;28478:118;:::i;:::-;28470:126;;28606:72;28674:2;28663:9;28659:18;28650:6;28606:72;:::i;:::-;27619:1066;;;;;;;;;;:::o;28691:985::-;28974:4;29012:3;29001:9;28997:19;28989:27;;29026:71;29094:1;29083:9;29079:17;29070:6;29026:71;:::i;:::-;29107:72;29175:2;29164:9;29160:18;29151:6;29107:72;:::i;:::-;29189;29257:2;29246:9;29242:18;29233:6;29189:72;:::i;:::-;29271;29339:2;29328:9;29324:18;29315:6;29271:72;:::i;:::-;29353:73;29421:3;29410:9;29406:19;29397:6;29353:73;:::i;:::-;29436:67;29498:3;29487:9;29483:19;29474:6;29436:67;:::i;:::-;29513:73;29581:3;29570:9;29566:19;29557:6;29513:73;:::i;:::-;29596;29664:3;29653:9;29649:19;29640:6;29596:73;:::i;:::-;28691:985;;;;;;;;;;;:::o;29682:180::-;29730:77;29727:1;29720:88;29827:4;29824:1;29817:15;29851:4;29848:1;29841:15;29868:180;29916:77;29913:1;29906:88;30013:4;30010:1;30003:15;30037:4;30034:1;30027:15;30054:233;30093:3;30116:24;30134:5;30116:24;:::i;:::-;30107:33;;30162:66;30155:5;30152:77;30149:103;;30232:18;;:::i;:::-;30149:103;30279:1;30272:5;30268:13;30261:20;;30054:233;;;:::o;30293:225::-;30433:34;30429:1;30421:6;30417:14;30410:58;30502:8;30497:2;30489:6;30485:15;30478:33;30293:225;:::o;30524:366::-;30666:3;30687:67;30751:2;30746:3;30687:67;:::i;:::-;30680:74;;30763:93;30852:3;30763:93;:::i;:::-;30881:2;30876:3;30872:12;30865:19;;30524:366;;;:::o;30896:419::-;31062:4;31100:2;31089:9;31085:18;31077:26;;31149:9;31143:4;31139:20;31135:1;31124:9;31120:17;31113:47;31177:131;31303:4;31177:131;:::i;:::-;31169:139;;30896:419;;;:::o;31321:244::-;31461:34;31457:1;31449:6;31445:14;31438:58;31530:27;31525:2;31517:6;31513:15;31506:52;31321:244;:::o;31571:366::-;31713:3;31734:67;31798:2;31793:3;31734:67;:::i;:::-;31727:74;;31810:93;31899:3;31810:93;:::i;:::-;31928:2;31923:3;31919:12;31912:19;;31571:366;;;:::o;31943:419::-;32109:4;32147:2;32136:9;32132:18;32124:26;;32196:9;32190:4;32186:20;32182:1;32171:9;32167:17;32160:47;32224:131;32350:4;32224:131;:::i;:::-;32216:139;;31943:419;;;:::o;32368:239::-;32508:34;32504:1;32496:6;32492:14;32485:58;32577:22;32572:2;32564:6;32560:15;32553:47;32368:239;:::o;32613:366::-;32755:3;32776:67;32840:2;32835:3;32776:67;:::i;:::-;32769:74;;32852:93;32941:3;32852:93;:::i;:::-;32970:2;32965:3;32961:12;32954:19;;32613:366;;;:::o;32985:419::-;33151:4;33189:2;33178:9;33174:18;33166:26;;33238:9;33232:4;33228:20;33224:1;33213:9;33209:17;33202:47;33266:131;33392:4;33266:131;:::i;:::-;33258:139;;32985:419;;;:::o;33410:225::-;33550:34;33546:1;33538:6;33534:14;33527:58;33619:8;33614:2;33606:6;33602:15;33595:33;33410:225;:::o;33641:366::-;33783:3;33804:67;33868:2;33863:3;33804:67;:::i;:::-;33797:74;;33880:93;33969:3;33880:93;:::i;:::-;33998:2;33993:3;33989:12;33982:19;;33641:366;;;:::o;34013:419::-;34179:4;34217:2;34206:9;34202:18;34194:26;;34266:9;34260:4;34256:20;34252:1;34241:9;34237:17;34230:47;34294:131;34420:4;34294:131;:::i;:::-;34286:139;;34013:419;;;:::o;34438:180::-;34578:32;34574:1;34566:6;34562:14;34555:56;34438:180;:::o;34624:366::-;34766:3;34787:67;34851:2;34846:3;34787:67;:::i;:::-;34780:74;;34863:93;34952:3;34863:93;:::i;:::-;34981:2;34976:3;34972:12;34965:19;;34624:366;;;:::o;34996:419::-;35162:4;35200:2;35189:9;35185:18;35177:26;;35249:9;35243:4;35239:20;35235:1;35224:9;35220:17;35213:47;35277:131;35403:4;35277:131;:::i;:::-;35269:139;;34996:419;;;:::o;35421:181::-;35561:33;35557:1;35549:6;35545:14;35538:57;35421:181;:::o;35608:366::-;35750:3;35771:67;35835:2;35830:3;35771:67;:::i;:::-;35764:74;;35847:93;35936:3;35847:93;:::i;:::-;35965:2;35960:3;35956:12;35949:19;;35608:366;;;:::o;35980:419::-;36146:4;36184:2;36173:9;36169:18;36161:26;;36233:9;36227:4;36223:20;36219:1;36208:9;36204:17;36197:47;36261:131;36387:4;36261:131;:::i;:::-;36253:139;;35980:419;;;:::o;36405:226::-;36545:34;36541:1;36533:6;36529:14;36522:58;36614:9;36609:2;36601:6;36597:15;36590:34;36405:226;:::o;36637:366::-;36779:3;36800:67;36864:2;36859:3;36800:67;:::i;:::-;36793:74;;36876:93;36965:3;36876:93;:::i;:::-;36994:2;36989:3;36985:12;36978:19;;36637:366;;;:::o;37009:419::-;37175:4;37213:2;37202:9;37198:18;37190:26;;37262:9;37256:4;37252:20;37248:1;37237:9;37233:17;37226:47;37290:131;37416:4;37290:131;:::i;:::-;37282:139;;37009:419;;;:::o;37434:223::-;37574:34;37570:1;37562:6;37558:14;37551:58;37643:6;37638:2;37630:6;37626:15;37619:31;37434:223;:::o;37663:366::-;37805:3;37826:67;37890:2;37885:3;37826:67;:::i;:::-;37819:74;;37902:93;37991:3;37902:93;:::i;:::-;38020:2;38015:3;38011:12;38004:19;;37663:366;;;:::o;38035:419::-;38201:4;38239:2;38228:9;38224:18;38216:26;;38288:9;38282:4;38278:20;38274:1;38263:9;38259:17;38252:47;38316:131;38442:4;38316:131;:::i;:::-;38308:139;;38035:419;;;:::o;38460:225::-;38600:34;38596:1;38588:6;38584:14;38577:58;38669:8;38664:2;38656:6;38652:15;38645:33;38460:225;:::o;38691:366::-;38833:3;38854:67;38918:2;38913:3;38854:67;:::i;:::-;38847:74;;38930:93;39019:3;38930:93;:::i;:::-;39048:2;39043:3;39039:12;39032:19;;38691:366;;;:::o;39063:419::-;39229:4;39267:2;39256:9;39252:18;39244:26;;39316:9;39310:4;39306:20;39302:1;39291:9;39287:17;39280:47;39344:131;39470:4;39344:131;:::i;:::-;39336:139;;39063:419;;;:::o;39488:178::-;39628:30;39624:1;39616:6;39612:14;39605:54;39488:178;:::o;39672:366::-;39814:3;39835:67;39899:2;39894:3;39835:67;:::i;:::-;39828:74;;39911:93;40000:3;39911:93;:::i;:::-;40029:2;40024:3;40020:12;40013:19;;39672:366;;;:::o;40044:419::-;40210:4;40248:2;40237:9;40233:18;40225:26;;40297:9;40291:4;40287:20;40283:1;40272:9;40268:17;40261:47;40325:131;40451:4;40325:131;:::i;:::-;40317:139;;40044:419;;;:::o;40469:182::-;40609:34;40605:1;40597:6;40593:14;40586:58;40469:182;:::o;40657:366::-;40799:3;40820:67;40884:2;40879:3;40820:67;:::i;:::-;40813:74;;40896:93;40985:3;40896:93;:::i;:::-;41014:2;41009:3;41005:12;40998:19;;40657:366;;;:::o;41029:419::-;41195:4;41233:2;41222:9;41218:18;41210:26;;41282:9;41276:4;41272:20;41268:1;41257:9;41253:17;41246:47;41310:131;41436:4;41310:131;:::i;:::-;41302:139;;41029:419;;;:::o;41454:221::-;41594:34;41590:1;41582:6;41578:14;41571:58;41663:4;41658:2;41650:6;41646:15;41639:29;41454:221;:::o;41681:366::-;41823:3;41844:67;41908:2;41903:3;41844:67;:::i;:::-;41837:74;;41920:93;42009:3;41920:93;:::i;:::-;42038:2;42033:3;42029:12;42022:19;;41681:366;;;:::o;42053:419::-;42219:4;42257:2;42246:9;42242:18;42234:26;;42306:9;42300:4;42296:20;42292:1;42281:9;42277:17;42270:47;42334:131;42460:4;42334:131;:::i;:::-;42326:139;;42053:419;;;:::o;42478:180::-;42618:32;42614:1;42606:6;42602:14;42595:56;42478:180;:::o;42664:366::-;42806:3;42827:67;42891:2;42886:3;42827:67;:::i;:::-;42820:74;;42903:93;42992:3;42903:93;:::i;:::-;43021:2;43016:3;43012:12;43005:19;;42664:366;;;:::o;43036:419::-;43202:4;43240:2;43229:9;43225:18;43217:26;;43289:9;43283:4;43279:20;43275:1;43264:9;43260:17;43253:47;43317:131;43443:4;43317:131;:::i;:::-;43309:139;;43036:419;;;:::o;43461:231::-;43601:34;43597:1;43589:6;43585:14;43578:58;43670:14;43665:2;43657:6;43653:15;43646:39;43461:231;:::o;43698:366::-;43840:3;43861:67;43925:2;43920:3;43861:67;:::i;:::-;43854:74;;43937:93;44026:3;43937:93;:::i;:::-;44055:2;44050:3;44046:12;44039:19;;43698:366;;;:::o;44070:419::-;44236:4;44274:2;44263:9;44259:18;44251:26;;44323:9;44317:4;44313:20;44309:1;44298:9;44294:17;44287:47;44351:131;44477:4;44351:131;:::i;:::-;44343:139;;44070:419;;;:::o;44569:1575::-;44722:6;44717:3;44713:16;44813:4;44806:5;44802:16;44796:23;44832:63;44889:4;44884:3;44880:14;44866:12;44832:63;:::i;:::-;44739:166;44991:4;44984:5;44980:16;44974:23;45010:63;45067:4;45062:3;45058:14;45044:12;45010:63;:::i;:::-;44915:168;45165:4;45158:5;45154:16;45148:23;45184:63;45241:4;45236:3;45232:14;45218:12;45184:63;:::i;:::-;45093:164;45341:4;45334:5;45330:16;45324:23;45360:63;45417:4;45412:3;45408:14;45394:12;45360:63;:::i;:::-;45267:166;45520:4;45513:5;45509:16;45503:23;45539:63;45596:4;45591:3;45587:14;45573:12;45539:63;:::i;:::-;45443:169;45695:4;45688:5;45684:16;45678:23;45714:63;45771:4;45766:3;45762:14;45748:12;45714:63;:::i;:::-;45622:165;45868:4;45861:5;45857:16;45851:23;45887:63;45944:4;45939:3;45935:14;45921:12;45887:63;:::i;:::-;45797:163;46045:4;46038:5;46034:16;46028:23;46064:63;46121:4;46116:3;46112:14;46098:12;46064:63;:::i;:::-;45970:167;44691:1453;44569:1575;;:::o;46150:149::-;46252:6;46286:5;46280:12;46270:22;;46150:149;;;:::o;46305:219::-;46439:11;46473:6;46468:3;46461:19;46513:4;46508:3;46504:14;46489:29;;46305:219;;;;:::o;46530:167::-;46632:4;46655:3;46647:11;;46685:4;46680:3;46676:14;46668:22;;46530:167;;;:::o;46789:707::-;46946:4;46941:3;46937:14;47035:4;47028:5;47024:16;47018:23;47054:63;47111:4;47106:3;47102:14;47088:12;47054:63;:::i;:::-;46961:166;47213:4;47206:5;47202:16;47196:23;47232:63;47289:4;47284:3;47280:14;47266:12;47232:63;:::i;:::-;47137:168;47397:4;47390:5;47386:16;47380:23;47416:63;47473:4;47468:3;47464:14;47450:12;47416:63;:::i;:::-;47315:174;46915:581;46789:707;;:::o;47502:319::-;47641:10;47662:116;47774:3;47766:6;47662:116;:::i;:::-;47810:4;47805:3;47801:14;47787:28;;47502:319;;;;:::o;47827:148::-;47932:4;47964;47959:3;47955:14;47947:22;;47827:148;;;:::o;48071:1012::-;48260:3;48289:89;48372:5;48289:89;:::i;:::-;48394:121;48508:6;48503:3;48394:121;:::i;:::-;48387:128;;48539:91;48624:5;48539:91;:::i;:::-;48653:7;48684:1;48669:389;48694:6;48691:1;48688:13;48669:389;;;48770:6;48764:13;48797:133;48926:3;48911:13;48797:133;:::i;:::-;48790:140;;48953:95;49041:6;48953:95;:::i;:::-;48943:105;;48729:329;48716:1;48713;48709:9;48704:14;;48669:389;;;48673:14;49074:3;49067:10;;48265:818;;;48071:1012;;;;:::o;49089:737::-;49386:4;49424:3;49413:9;49409:19;49401:27;;49438:127;49562:1;49551:9;49547:17;49538:6;49438:127;:::i;:::-;49613:9;49607:4;49603:20;49597:3;49586:9;49582:19;49575:49;49641:178;49814:4;49805:6;49641:178;:::i;:::-;49633:186;;49089:737;;;;;:::o;49832:137::-;49886:5;49917:6;49911:13;49902:22;;49933:30;49957:5;49933:30;:::i;:::-;49832:137;;;;:::o;49975:143::-;50032:5;50063:6;50057:13;50048:22;;50079:33;50106:5;50079:33;:::i;:::-;49975:143;;;;:::o;50124:346::-;50236:4;50326:18;50318:6;50315:30;50312:56;;;50348:18;;:::i;:::-;50312:56;50398:4;50390:6;50386:17;50378:25;;50458:4;50452;50448:15;50440:23;;50124:346;;;:::o;50476:117::-;50585:1;50582;50575:12;50767:805;50862:5;50906:4;50894:9;50889:3;50885:19;50881:30;50878:117;;;50914:79;;:::i;:::-;50878:117;51013:21;51029:4;51013:21;:::i;:::-;51004:30;;51095:1;51135:60;51191:3;51182:6;51171:9;51167:22;51135:60;:::i;:::-;51128:4;51121:5;51117:16;51110:86;51044:163;51270:2;51311:60;51367:3;51358:6;51347:9;51343:22;51311:60;:::i;:::-;51304:4;51297:5;51293:16;51286:86;51217:166;51452:2;51493:60;51549:3;51540:6;51529:9;51525:22;51493:60;:::i;:::-;51486:4;51479:5;51475:16;51468:86;51393:172;50767:805;;;;:::o;51625:837::-;51767:5;51792:116;51808:99;51900:6;51808:99;:::i;:::-;51792:116;:::i;:::-;51783:125;;51928:5;51957:6;51950:5;51943:21;51991:4;51984:5;51980:16;51973:23;;52044:4;52036:6;52032:17;52024:6;52020:30;52073:3;52065:6;52062:15;52059:122;;;52092:79;;:::i;:::-;52059:122;52207:6;52190:266;52224:6;52219:3;52216:15;52190:266;;;52299:3;52328:83;52407:3;52395:10;52328:83;:::i;:::-;52323:3;52316:96;52441:4;52436:3;52432:14;52425:21;;52266:190;52250:4;52245:3;52241:14;52234:21;;52190:266;;;52194:21;51773:689;;51625:837;;;;;:::o;52515:455::-;52632:5;52681:3;52674:4;52666:6;52662:17;52658:27;52648:122;;52689:79;;:::i;:::-;52648:122;52799:6;52793:13;52824:140;52960:3;52952:6;52945:4;52937:6;52933:17;52824:140;:::i;:::-;52815:149;;52638:332;52515:455;;;;:::o;52976:930::-;53121:6;53129;53137;53186:2;53174:9;53165:7;53161:23;53157:32;53154:119;;;53192:79;;:::i;:::-;53154:119;53312:1;53337:61;53390:7;53381:6;53370:9;53366:22;53337:61;:::i;:::-;53327:71;;53283:125;53447:2;53473:64;53529:7;53520:6;53509:9;53505:22;53473:64;:::i;:::-;53463:74;;53418:129;53607:2;53596:9;53592:18;53586:25;53638:18;53630:6;53627:30;53624:117;;;53660:79;;:::i;:::-;53624:117;53765:124;53881:7;53872:6;53861:9;53857:22;53765:124;:::i;:::-;53755:134;;53557:342;52976:930;;;;;:::o;53912:178::-;54052:30;54048:1;54040:6;54036:14;54029:54;53912:178;:::o;54096:366::-;54238:3;54259:67;54323:2;54318:3;54259:67;:::i;:::-;54252:74;;54335:93;54424:3;54335:93;:::i;:::-;54453:2;54448:3;54444:12;54437:19;;54096:366;;;:::o;54468:419::-;54634:4;54672:2;54661:9;54657:18;54649:26;;54721:9;54715:4;54711:20;54707:1;54696:9;54692:17;54685:47;54749:131;54875:4;54749:131;:::i;:::-;54741:139;;54468:419;;;:::o;54893:180::-;54941:77;54938:1;54931:88;55038:4;55035:1;55028:15;55062:4;55059:1;55052:15;55079:320;55123:6;55160:1;55154:4;55150:12;55140:22;;55207:1;55201:4;55197:12;55228:18;55218:81;;55284:4;55276:6;55272:17;55262:27;;55218:81;55346:2;55338:6;55335:14;55315:18;55312:38;55309:84;;55365:18;;:::i;:::-;55309:84;55130:269;55079:320;;;:::o;55405:191::-;55445:3;55464:20;55482:1;55464:20;:::i;:::-;55459:25;;55498:20;55516:1;55498:20;:::i;:::-;55493:25;;55541:1;55538;55534:9;55527:16;;55562:3;55559:1;55556:10;55553:36;;;55569:18;;:::i;:::-;55553:36;55405:191;;;;:::o;55602:222::-;55742:34;55738:1;55730:6;55726:14;55719:58;55811:5;55806:2;55798:6;55794:15;55787:30;55602:222;:::o;55830:366::-;55972:3;55993:67;56057:2;56052:3;55993:67;:::i;:::-;55986:74;;56069:93;56158:3;56069:93;:::i;:::-;56187:2;56182:3;56178:12;56171:19;;55830:366;;;:::o;56202:419::-;56368:4;56406:2;56395:9;56391:18;56383:26;;56455:9;56449:4;56445:20;56441:1;56430:9;56426:17;56419:47;56483:131;56609:4;56483:131;:::i;:::-;56475:139;;56202:419;;;:::o;56627:180::-;56767:32;56763:1;56755:6;56751:14;56744:56;56627:180;:::o;56813:366::-;56955:3;56976:67;57040:2;57035:3;56976:67;:::i;:::-;56969:74;;57052:93;57141:3;57052:93;:::i;:::-;57170:2;57165:3;57161:12;57154:19;;56813:366;;;:::o;57185:419::-;57351:4;57389:2;57378:9;57374:18;57366:26;;57438:9;57432:4;57428:20;57424:1;57413:9;57409:17;57402:47;57466:131;57592:4;57466:131;:::i;:::-;57458:139;;57185:419;;;:::o;57610:229::-;57750:34;57746:1;57738:6;57734:14;57727:58;57819:12;57814:2;57806:6;57802:15;57795:37;57610:229;:::o;57845:366::-;57987:3;58008:67;58072:2;58067:3;58008:67;:::i;:::-;58001:74;;58084:93;58173:3;58084:93;:::i;:::-;58202:2;58197:3;58193:12;58186:19;;57845:366;;;:::o;58217:419::-;58383:4;58421:2;58410:9;58406:18;58398:26;;58470:9;58464:4;58460:20;58456:1;58445:9;58441:17;58434:47;58498:131;58624:4;58498:131;:::i;:::-;58490:139;;58217:419;;;:::o;58642:227::-;58782:34;58778:1;58770:6;58766:14;58759:58;58851:10;58846:2;58838:6;58834:15;58827:35;58642:227;:::o;58875:366::-;59017:3;59038:67;59102:2;59097:3;59038:67;:::i;:::-;59031:74;;59114:93;59203:3;59114:93;:::i;:::-;59232:2;59227:3;59223:12;59216:19;;58875:366;;;:::o;59247:419::-;59413:4;59451:2;59440:9;59436:18;59428:26;;59500:9;59494:4;59490:20;59486:1;59475:9;59471:17;59464:47;59528:131;59654:4;59528:131;:::i;:::-;59520:139;;59247:419;;;:::o;59672:232::-;59812:34;59808:1;59800:6;59796:14;59789:58;59881:15;59876:2;59868:6;59864:15;59857:40;59672:232;:::o;59910:366::-;60052:3;60073:67;60137:2;60132:3;60073:67;:::i;:::-;60066:74;;60149:93;60238:3;60149:93;:::i;:::-;60267:2;60262:3;60258:12;60251:19;;59910:366;;;:::o;60282:419::-;60448:4;60486:2;60475:9;60471:18;60463:26;;60535:9;60529:4;60525:20;60521:1;60510:9;60506:17;60499:47;60563:131;60689:4;60563:131;:::i;:::-;60555:139;;60282:419;;;:::o;60707:231::-;60847:34;60843:1;60835:6;60831:14;60824:58;60916:14;60911:2;60903:6;60899:15;60892:39;60707:231;:::o;60944:366::-;61086:3;61107:67;61171:2;61166:3;61107:67;:::i;:::-;61100:74;;61183:93;61272:3;61183:93;:::i;:::-;61301:2;61296:3;61292:12;61285:19;;60944:366;;;:::o;61316:419::-;61482:4;61520:2;61509:9;61505:18;61497:26;;61569:9;61563:4;61559:20;61555:1;61544:9;61540:17;61533:47;61597:131;61723:4;61597:131;:::i;:::-;61589:139;;61316:419;;;:::o;61741:230::-;61881:34;61877:1;61869:6;61865:14;61858:58;61950:13;61945:2;61937:6;61933:15;61926:38;61741:230;:::o;61977:366::-;62119:3;62140:67;62204:2;62199:3;62140:67;:::i;:::-;62133:74;;62216:93;62305:3;62216:93;:::i;:::-;62334:2;62329:3;62325:12;62318:19;;61977:366;;;:::o;62349:419::-;62515:4;62553:2;62542:9;62538:18;62530:26;;62602:9;62596:4;62592:20;62588:1;62577:9;62573:17;62566:47;62630:131;62756:4;62630:131;:::i;:::-;62622:139;;62349:419;;;:::o;62774:194::-;62814:4;62834:20;62852:1;62834:20;:::i;:::-;62829:25;;62868:20;62886:1;62868:20;:::i;:::-;62863:25;;62912:1;62909;62905:9;62897:17;;62936:1;62930:4;62927:11;62924:37;;;62941:18;;:::i;:::-;62924:37;62774:194;;;;:::o;62974:224::-;63114:34;63110:1;63102:6;63098:14;63091:58;63183:7;63178:2;63170:6;63166:15;63159:32;62974:224;:::o;63204:366::-;63346:3;63367:67;63431:2;63426:3;63367:67;:::i;:::-;63360:74;;63443:93;63532:3;63443:93;:::i;:::-;63561:2;63556:3;63552:12;63545:19;;63204:366;;;:::o;63576:419::-;63742:4;63780:2;63769:9;63765:18;63757:26;;63829:9;63823:4;63819:20;63815:1;63804:9;63800:17;63793:47;63857:131;63983:4;63857:131;:::i;:::-;63849:139;;63576:419;;;:::o;64001:332::-;64122:4;64160:2;64149:9;64145:18;64137:26;;64173:71;64241:1;64230:9;64226:17;64217:6;64173:71;:::i;:::-;64254:72;64322:2;64311:9;64307:18;64298:6;64254:72;:::i;:::-;64001:332;;;;;:::o;64339:351::-;64409:6;64458:2;64446:9;64437:7;64433:23;64429:32;64426:119;;;64464:79;;:::i;:::-;64426:119;64584:1;64609:64;64665:7;64656:6;64645:9;64641:22;64609:64;:::i;:::-;64599:74;;64555:128;64339:351;;;;:::o;64696:235::-;64836:34;64832:1;64824:6;64820:14;64813:58;64905:18;64900:2;64892:6;64888:15;64881:43;64696:235;:::o;64937:366::-;65079:3;65100:67;65164:2;65159:3;65100:67;:::i;:::-;65093:74;;65176:93;65265:3;65176:93;:::i;:::-;65294:2;65289:3;65285:12;65278:19;;64937:366;;;:::o;65309:419::-;65475:4;65513:2;65502:9;65498:18;65490:26;;65562:9;65556:4;65552:20;65548:1;65537:9;65533:17;65526:47;65590:131;65716:4;65590:131;:::i;:::-;65582:139;;65309:419;;;:::o;65734:442::-;65883:4;65921:2;65910:9;65906:18;65898:26;;65934:71;66002:1;65991:9;65987:17;65978:6;65934:71;:::i;:::-;66015:72;66083:2;66072:9;66068:18;66059:6;66015:72;:::i;:::-;66097;66165:2;66154:9;66150:18;66141:6;66097:72;:::i;:::-;65734:442;;;;;;:::o;66182:99::-;66234:6;66268:5;66262:12;66252:22;;66182:99;;;:::o;66287:148::-;66389:11;66426:3;66411:18;;66287:148;;;;:::o;66441:246::-;66522:1;66532:113;66546:6;66543:1;66540:13;66532:113;;;66631:1;66626:3;66622:11;66616:18;66612:1;66607:3;66603:11;66596:39;66568:2;66565:1;66561:10;66556:15;;66532:113;;;66679:1;66670:6;66665:3;66661:16;66654:27;66503:184;66441:246;;;:::o;66693:390::-;66799:3;66827:39;66860:5;66827:39;:::i;:::-;66882:89;66964:6;66959:3;66882:89;:::i;:::-;66875:96;;66980:65;67038:6;67033:3;67026:4;67019:5;67015:16;66980:65;:::i;:::-;67070:6;67065:3;67061:16;67054:23;;66803:280;66693:390;;;;:::o;67089:275::-;67221:3;67243:95;67334:3;67325:6;67243:95;:::i;:::-;67236:102;;67355:3;67348:10;;67089:275;;;;:::o;67370:775::-;67603:4;67641:3;67630:9;67626:19;67618:27;;67655:71;67723:1;67712:9;67708:17;67699:6;67655:71;:::i;:::-;67736:72;67804:2;67793:9;67789:18;67780:6;67736:72;:::i;:::-;67818;67886:2;67875:9;67871:18;67862:6;67818:72;:::i;:::-;67900;67968:2;67957:9;67953:18;67944:6;67900:72;:::i;:::-;67982:73;68050:3;68039:9;68035:19;68026:6;67982:73;:::i;:::-;68065;68133:3;68122:9;68118:19;68109:6;68065:73;:::i;:::-;67370:775;;;;;;;;;:::o

Swarm Source

ipfs://ad63aade7b4e0b6b4d13c3a79a90822b456b80a1844b114baf8d2a42745bb70c

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.