Contract
0xbfC044a234E45412eCfeC2Cd6aAe2dd0C083a7cd
6
Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
[ Download CSV Export ]
Contract Name:
MultichainV7Router
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-09-02 */ // SPDX-License-Identifier: GPL-3.0-or-later // Sources flattened with hardhat v2.9.1 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/access/MPCManageable.sol pragma solidity ^0.8.10; abstract contract MPCManageable { using Address for address; address public mpc; address public pendingMPC; uint256 public constant delay = 2 days; uint256 public delayMPC; modifier onlyMPC() { require(msg.sender == mpc, "MPC: only mpc"); _; } event LogChangeMPC(address indexed oldMPC, address indexed newMPC, uint256 effectiveTime); event LogApplyMPC(address indexed oldMPC, address indexed newMPC, uint256 applyTime); constructor(address _mpc) { require(_mpc != address(0), "MPC: mpc is the zero address"); mpc = _mpc; emit LogChangeMPC(address(0), mpc, block.timestamp); } function changeMPC(address _mpc) external onlyMPC { require(_mpc != address(0), "MPC: mpc is the zero address"); pendingMPC = _mpc; delayMPC = block.timestamp + delay; emit LogChangeMPC(mpc, pendingMPC, delayMPC); } function applyMPC() external { require( msg.sender == pendingMPC || (msg.sender == mpc && address(pendingMPC).isContract()), "MPC: only pending mpc" ); require(delayMPC > 0 && block.timestamp >= delayMPC, "MPC: time before delayMPC"); emit LogApplyMPC(mpc, pendingMPC, block.timestamp); mpc = pendingMPC; pendingMPC = address(0); delayMPC = 0; } } // File contracts/access/PausableControl.sol pragma solidity ^0.8.10; abstract contract PausableControl { mapping(bytes32 => bool) private _pausedRoles; bytes32 public constant PAUSE_ALL_ROLE = 0x00; event Paused(bytes32 role); event Unpaused(bytes32 role); modifier whenNotPaused(bytes32 role) { require( !paused(role) && !paused(PAUSE_ALL_ROLE), "PausableControl: paused" ); _; } modifier whenPaused(bytes32 role) { require( paused(role) || paused(PAUSE_ALL_ROLE), "PausableControl: not paused" ); _; } function paused(bytes32 role) public view virtual returns (bool) { return _pausedRoles[role]; } function _pause(bytes32 role) internal virtual whenNotPaused(role) { _pausedRoles[role] = true; emit Paused(role); } function _unpause(bytes32 role) internal virtual whenPaused(role) { _pausedRoles[role] = false; emit Unpaused(role); } } // File contracts/access/AdminControl.sol pragma solidity ^0.8.10; abstract contract AdminControl { address public admin; address public pendingAdmin; event ChangeAdmin(address indexed _old, address indexed _new); event ApplyAdmin(address indexed _old, address indexed _new); constructor(address _admin) { require(_admin != address(0), "AdminControl: address(0)"); admin = _admin; } modifier onlyAdmin() { require(msg.sender == admin, "AdminControl: not admin"); _; } function changeAdmin(address _admin) external onlyAdmin { require(_admin != address(0), "AdminControl: address(0)"); pendingAdmin = _admin; emit ChangeAdmin(admin, _admin); } function applyAdmin() external { require(msg.sender == pendingAdmin, "AdminControl: Forbidden"); emit ApplyAdmin(admin, pendingAdmin); admin = pendingAdmin; pendingAdmin = address(0); } } // File contracts/access/PausableControlWithAdmin.sol pragma solidity ^0.8.10; abstract contract PausableControlWithAdmin is PausableControl, AdminControl { constructor(address _admin) AdminControl(_admin) { } function pause(bytes32 role) external onlyAdmin { _pause(role); } function unpause(bytes32 role) external onlyAdmin { _unpause(role); } } // File contracts/router/interfaces/IAnycallExecutor.sol pragma solidity ^0.8.6; /// IAnycallExecutor interface of the anycall executor interface IAnycallExecutor { function execute( address _anycallProxy, address _token, uint256 _amount, bytes calldata _data ) external returns (bool success, bytes memory result); } // File contracts/router/interfaces/SwapInfo.sol pragma solidity ^0.8.6; struct SwapInfo { bytes32 swapoutID; address token; address receiver; uint256 amount; uint256 fromChainID; } // File contracts/router/interfaces/IRouterSecurity.sol pragma solidity ^0.8.10; interface IRouterSecurity { function registerSwapin(string calldata swapID, SwapInfo calldata swapInfo) external; function registerSwapout( address token, address from, string calldata to, uint256 amount, uint256 toChainID, string calldata anycallProxy, bytes calldata data ) external returns (bytes32 swapoutID); function isSwapCompleted( string calldata swapID, bytes32 swapoutID, uint256 fromChainID ) external view returns (bool); } // File contracts/router/interfaces/IRetrySwapinAndExec.sol pragma solidity ^0.8.10; interface IRetrySwapinAndExec { function retrySwapinAndExec( string calldata swapID, SwapInfo calldata swapInfo, address anycallProxy, bytes calldata data, bool dontExec ) external; } // File contracts/router/interfaces/IUnderlying.sol pragma solidity ^0.8.10; interface IUnderlying { function underlying() external view returns (address); function deposit(uint256 amount, address to) external returns (uint256); function withdraw(uint256 amount, address to) external returns (uint256); } // File contracts/router/interfaces/IwNATIVE.sol pragma solidity ^0.8.10; interface IwNATIVE { function deposit() external payable; function withdraw(uint256) external; } // File contracts/router/interfaces/IAnyswapERC20Auth.sol pragma solidity ^0.8.10; interface IAnyswapERC20Auth { function changeVault(address newVault) external returns (bool); } // File contracts/router/interfaces/IRouterMintBurn.sol pragma solidity ^0.8.10; interface IRouterMintBurn { function mint(address to, uint256 amount) external returns (bool); function burn(address from, uint256 amount) external returns (bool); } // File contracts/router/MultichainV7Router.sol pragma solidity ^0.8.10; contract MultichainV7Router is MPCManageable, PausableControlWithAdmin, ReentrancyGuard, IRetrySwapinAndExec { using Address for address; using SafeERC20 for IERC20; bytes32 public constant Swapin_Paused_ROLE = keccak256("Swapin_Paused_ROLE"); bytes32 public constant Swapout_Paused_ROLE = keccak256("Swapout_Paused_ROLE"); bytes32 public constant Call_Paused_ROLE = keccak256("Call_Paused_ROLE"); bytes32 public constant Exec_Paused_ROLE = keccak256("Exec_Paused_ROLE"); address public immutable wNATIVE; address public immutable anycallExecutor; address public routerSecurity; struct ProxyInfo { bool supported; bool acceptAnyToken; } mapping(address => ProxyInfo) public anycallProxyInfo; mapping(bytes32 => bool) public retryRecords; event LogAnySwapIn( string swapID, bytes32 indexed swapoutID, address indexed token, address indexed receiver, uint256 amount, uint256 fromChainID ); event LogAnySwapOut( bytes32 indexed swapoutID, address indexed token, address indexed from, string receiver, uint256 amount, uint256 toChainID ); event LogAnySwapInAndExec( string swapID, bytes32 indexed swapoutID, address indexed token, address indexed receiver, uint256 amount, uint256 fromChainID, bool success, bytes result ); event LogAnySwapOutAndCall( bytes32 indexed swapoutID, address indexed token, address indexed from, string receiver, uint256 amount, uint256 toChainID, string anycallProxy, bytes data ); event LogRetryExecRecord( string swapID, bytes32 swapoutID, address token, address receiver, uint256 amount, uint256 fromChainID, address anycallProxy, bytes data ); event LogRetrySwapInAndExec( string swapID, bytes32 swapoutID, address token, address receiver, uint256 amount, uint256 fromChainID, bool dontExec, bool success, bytes result ); constructor( address _admin, address _mpc, address _wNATIVE, address _anycallExecutor, address _routerSecurity ) MPCManageable(_mpc) PausableControlWithAdmin(_admin) { require(_anycallExecutor != address(0), "zero anycall executor"); anycallExecutor = _anycallExecutor; wNATIVE = _wNATIVE; routerSecurity = _routerSecurity; } receive() external payable { assert(msg.sender == wNATIVE); // only accept Native via fallback from the wNative contract } function setRouterSecurity(address _routerSecurity) external nonReentrant onlyMPC { routerSecurity = _routerSecurity; } function changeVault(address token, address newVault) external nonReentrant onlyMPC returns (bool) { return IAnyswapERC20Auth(token).changeVault(newVault); } function addAnycallProxies( address[] calldata proxies, bool[] calldata acceptAnyTokenFlags ) external nonReentrant onlyMPC { uint256 length = proxies.length; require(length == acceptAnyTokenFlags.length, "length mismatch"); for (uint256 i = 0; i < length; i++) { anycallProxyInfo[proxies[i]] = ProxyInfo( true, acceptAnyTokenFlags[i] ); } } function removeAnycallProxies(address[] calldata proxies) external nonReentrant onlyMPC { for (uint256 i = 0; i < proxies.length; i++) { delete anycallProxyInfo[proxies[i]]; } } // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` function anySwapOut( address token, string calldata to, uint256 amount, uint256 toChainID ) external whenNotPaused(Swapout_Paused_ROLE) nonReentrant { bytes32 swapoutID = IRouterSecurity(routerSecurity).registerSwapout( token, msg.sender, to, amount, toChainID, "", "" ); assert(IRouterMintBurn(token).burn(msg.sender, amount)); emit LogAnySwapOut(swapoutID, token, msg.sender, to, amount, toChainID); } // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` and call anycall proxy with `data` function anySwapOutAndCall( address token, string calldata to, uint256 amount, uint256 toChainID, string calldata anycallProxy, bytes calldata data ) external whenNotPaused(Swapout_Paused_ROLE) whenNotPaused(Call_Paused_ROLE) nonReentrant { require(data.length > 0, "empty call data"); bytes32 swapoutID = IRouterSecurity(routerSecurity).registerSwapout( token, msg.sender, to, amount, toChainID, anycallProxy, data ); assert(IRouterMintBurn(token).burn(msg.sender, amount)); emit LogAnySwapOutAndCall( swapoutID, token, msg.sender, to, amount, toChainID, anycallProxy, data ); } function _anySwapOutUnderlying(address token, uint256 amount) internal whenNotPaused(Swapout_Paused_ROLE) returns (uint256) { address _underlying = IUnderlying(token).underlying(); require(_underlying != address(0), "MultichainRouter: zero underlying"); uint256 old_balance = IERC20(_underlying).balanceOf(token); IERC20(_underlying).safeTransferFrom(msg.sender, token, amount); uint256 new_balance = IERC20(_underlying).balanceOf(token); require( new_balance >= old_balance && new_balance <= old_balance + amount ); return new_balance - old_balance; } // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` by minting with `underlying` function anySwapOutUnderlying( address token, string calldata to, uint256 amount, uint256 toChainID ) external nonReentrant { uint256 recvAmount = _anySwapOutUnderlying(token, amount); bytes32 swapoutID = IRouterSecurity(routerSecurity).registerSwapout( token, msg.sender, to, recvAmount, toChainID, "", "" ); emit LogAnySwapOut( swapoutID, token, msg.sender, to, recvAmount, toChainID ); } // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` by minting with `underlying` and call anycall proxy with `data` function anySwapOutUnderlyingAndCall( address token, string calldata to, uint256 amount, uint256 toChainID, string calldata anycallProxy, bytes calldata data ) external whenNotPaused(Call_Paused_ROLE) nonReentrant { require(data.length > 0, "empty call data"); uint256 recvAmount = _anySwapOutUnderlying(token, amount); bytes32 swapoutID = IRouterSecurity(routerSecurity).registerSwapout( token, msg.sender, to, recvAmount, toChainID, anycallProxy, data ); emit LogAnySwapOutAndCall( swapoutID, token, msg.sender, to, recvAmount, toChainID, anycallProxy, data ); } function _anySwapOutNative(address token) internal whenNotPaused(Swapout_Paused_ROLE) returns (uint256) { require(wNATIVE != address(0), "MultichainRouter: zero wNATIVE"); require( IUnderlying(token).underlying() == wNATIVE, "MultichainRouter: underlying is not wNATIVE" ); uint256 old_balance = IERC20(wNATIVE).balanceOf(token); IwNATIVE(wNATIVE).deposit{value: msg.value}(); IERC20(wNATIVE).safeTransfer(token, msg.value); uint256 new_balance = IERC20(wNATIVE).balanceOf(token); require( new_balance >= old_balance && new_balance <= old_balance + msg.value ); return new_balance - old_balance; } // Swaps `msg.value` `Native` from this chain to `toChainID` chain with recipient `to` function anySwapOutNative( address token, string calldata to, uint256 toChainID ) external payable nonReentrant { uint256 recvAmount = _anySwapOutNative(token); bytes32 swapoutID = IRouterSecurity(routerSecurity).registerSwapout( token, msg.sender, to, recvAmount, toChainID, "", "" ); emit LogAnySwapOut( swapoutID, token, msg.sender, to, recvAmount, toChainID ); } // Swaps `msg.value` `Native` from this chain to `toChainID` chain with recipient `to` and call anycall proxy with `data` function anySwapOutNativeAndCall( address token, string calldata to, uint256 toChainID, string calldata anycallProxy, bytes calldata data ) external payable whenNotPaused(Call_Paused_ROLE) nonReentrant { require(data.length > 0, "empty call data"); uint256 recvAmount = _anySwapOutNative(token); bytes32 swapoutID = IRouterSecurity(routerSecurity).registerSwapout( token, msg.sender, to, recvAmount, toChainID, anycallProxy, data ); emit LogAnySwapOutAndCall( swapoutID, token, msg.sender, to, recvAmount, toChainID, anycallProxy, data ); } // Swaps `amount` `token` in `fromChainID` to `to` on this chainID function anySwapIn(string calldata swapID, SwapInfo calldata swapInfo) external whenNotPaused(Swapin_Paused_ROLE) nonReentrant onlyMPC { IRouterSecurity(routerSecurity).registerSwapin(swapID, swapInfo); assert( IRouterMintBurn(swapInfo.token).mint( swapInfo.receiver, swapInfo.amount ) ); emit LogAnySwapIn( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID ); } // Swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` function anySwapInUnderlying( string calldata swapID, SwapInfo calldata swapInfo ) external whenNotPaused(Swapin_Paused_ROLE) nonReentrant onlyMPC { require( IUnderlying(swapInfo.token).underlying() != address(0), "MultichainRouter: zero underlying" ); IRouterSecurity(routerSecurity).registerSwapin(swapID, swapInfo); assert( IRouterMintBurn(swapInfo.token).mint(address(this), swapInfo.amount) ); IUnderlying(swapInfo.token).withdraw( swapInfo.amount, swapInfo.receiver ); emit LogAnySwapIn( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID ); } // Swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `Native` function anySwapInNative(string calldata swapID, SwapInfo calldata swapInfo) external whenNotPaused(Swapin_Paused_ROLE) nonReentrant onlyMPC { require(wNATIVE != address(0), "MultichainRouter: zero wNATIVE"); require( IUnderlying(swapInfo.token).underlying() == wNATIVE, "MultichainRouter: underlying is not wNATIVE" ); IRouterSecurity(routerSecurity).registerSwapin(swapID, swapInfo); assert( IRouterMintBurn(swapInfo.token).mint(address(this), swapInfo.amount) ); IUnderlying(swapInfo.token).withdraw(swapInfo.amount, address(this)); IwNATIVE(wNATIVE).withdraw(swapInfo.amount); Address.sendValue(payable(swapInfo.receiver), swapInfo.amount); emit LogAnySwapIn( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID ); } // Swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` or `Native` if possible function anySwapInAuto(string calldata swapID, SwapInfo calldata swapInfo) external whenNotPaused(Swapin_Paused_ROLE) nonReentrant onlyMPC { IRouterSecurity(routerSecurity).registerSwapin(swapID, swapInfo); address _underlying = IUnderlying(swapInfo.token).underlying(); if ( _underlying != address(0) && IERC20(_underlying).balanceOf(swapInfo.token) >= swapInfo.amount ) { assert( IRouterMintBurn(swapInfo.token).mint( address(this), swapInfo.amount ) ); if (_underlying == wNATIVE) { IUnderlying(swapInfo.token).withdraw( swapInfo.amount, address(this) ); IwNATIVE(wNATIVE).withdraw(swapInfo.amount); Address.sendValue(payable(swapInfo.receiver), swapInfo.amount); } else { IUnderlying(swapInfo.token).withdraw( swapInfo.amount, swapInfo.receiver ); } } else { assert( IRouterMintBurn(swapInfo.token).mint( swapInfo.receiver, swapInfo.amount ) ); } emit LogAnySwapIn( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID ); } // Swaps `amount` `token` in `fromChainID` to `to` on this chainID function anySwapInAndExec( string calldata swapID, SwapInfo calldata swapInfo, address anycallProxy, bytes calldata data ) external whenNotPaused(Swapin_Paused_ROLE) whenNotPaused(Exec_Paused_ROLE) nonReentrant onlyMPC { require( anycallProxyInfo[anycallProxy].supported, "unsupported ancall proxy" ); IRouterSecurity(routerSecurity).registerSwapin(swapID, swapInfo); assert( IRouterMintBurn(swapInfo.token).mint( swapInfo.receiver, swapInfo.amount ) ); bool success; bytes memory result; try IAnycallExecutor(anycallExecutor).execute( anycallProxy, swapInfo.token, swapInfo.amount, data ) returns (bool succ, bytes memory res) { (success, result) = (succ, res); } catch {} emit LogAnySwapInAndExec( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID, success, result ); } // Swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` function anySwapInUnderlyingAndExec( string calldata swapID, SwapInfo calldata swapInfo, address anycallProxy, bytes calldata data ) external whenNotPaused(Swapin_Paused_ROLE) whenNotPaused(Exec_Paused_ROLE) nonReentrant onlyMPC { require( anycallProxyInfo[anycallProxy].supported, "unsupported ancall proxy" ); IRouterSecurity(routerSecurity).registerSwapin(swapID, swapInfo); address receiveToken; // transfer token to the receiver before execution { address _underlying = IUnderlying(swapInfo.token).underlying(); require( _underlying != address(0), "MultichainRouter: zero underlying" ); if ( IERC20(_underlying).balanceOf(swapInfo.token) >= swapInfo.amount ) { receiveToken = _underlying; assert( IRouterMintBurn(swapInfo.token).mint( address(this), swapInfo.amount ) ); IUnderlying(swapInfo.token).withdraw( swapInfo.amount, swapInfo.receiver ); } else if (anycallProxyInfo[anycallProxy].acceptAnyToken) { receiveToken = swapInfo.token; assert( IRouterMintBurn(swapInfo.token).mint( swapInfo.receiver, swapInfo.amount ) ); } else { bytes32 retryHash = keccak256( abi.encode( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID, anycallProxy, data ) ); retryRecords[retryHash] = true; emit LogRetryExecRecord( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID, anycallProxy, data ); return; } } bool success; bytes memory result; try IAnycallExecutor(anycallExecutor).execute( anycallProxy, receiveToken, swapInfo.amount, data ) returns (bool succ, bytes memory res) { (success, result) = (succ, res); } catch {} emit LogAnySwapInAndExec( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID, success, result ); } // should be called only by the `receiver` // @param dontExec // if `true` transfer the underlying token to the `receiver`, // and the `receiver` should complete the left job. // if `false` retry swapin and execute in normal way. function retrySwapinAndExec( string calldata swapID, SwapInfo calldata swapInfo, address anycallProxy, bytes calldata data, bool dontExec ) external nonReentrant { require(msg.sender == swapInfo.receiver, "forbid retry swap"); require( IRouterSecurity(routerSecurity).isSwapCompleted( swapID, swapInfo.swapoutID, swapInfo.fromChainID ), "swap not completed" ); bytes32 retryHash = keccak256( abi.encode( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID, anycallProxy, data ) ); require(retryRecords[retryHash], "retry record not exist"); retryRecords[retryHash] = false; address _underlying = IUnderlying(swapInfo.token).underlying(); require(_underlying != address(0), "MultichainRouter: zero underlying"); require( IERC20(_underlying).balanceOf(swapInfo.token) >= swapInfo.amount, "MultichainRouter: retry failed" ); assert( IRouterMintBurn(swapInfo.token).mint(address(this), swapInfo.amount) ); IUnderlying(swapInfo.token).withdraw( swapInfo.amount, swapInfo.receiver ); bool success; bytes memory result; if (!dontExec) { try IAnycallExecutor(anycallExecutor).execute( anycallProxy, _underlying, swapInfo.amount, data ) returns (bool succ, bytes memory res) { (success, result) = (succ, res); } catch {} } emit LogRetrySwapInAndExec( swapID, swapInfo.swapoutID, swapInfo.token, swapInfo.receiver, swapInfo.amount, swapInfo.fromChainID, dontExec, success, result ); } // extracts mpc fee from bridge fees function anySwapFeeTo(address token, uint256 amount) external nonReentrant onlyMPC { IRouterMintBurn(token).mint(address(this), amount); IUnderlying(token).withdraw(amount, msg.sender); } }
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_mpc","type":"address"},{"internalType":"address","name":"_wNATIVE","type":"address"},{"internalType":"address","name":"_anycallExecutor","type":"address"},{"internalType":"address","name":"_routerSecurity","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_old","type":"address"},{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"ApplyAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_old","type":"address"},{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"ChangeAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"swapID","type":"string"},{"indexed":true,"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"LogAnySwapIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"swapID","type":"string"},{"indexed":true,"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"LogAnySwapInAndExec","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"receiver","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"receiver","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"string","name":"anycallProxy","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"LogAnySwapOutAndCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"applyTime","type":"uint256"}],"name":"LogApplyMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"swapID","type":"string"},{"indexed":false,"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"address","name":"anycallProxy","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"LogRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"swapID","type":"string"},{"indexed":false,"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"dontExec","type":"bool"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"LogRetrySwapInAndExec","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"Call_Paused_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Exec_Paused_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_ALL_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Swapin_Paused_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Swapout_Paused_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"proxies","type":"address[]"},{"internalType":"bool[]","name":"acceptAnyTokenFlags","type":"bool[]"}],"name":"addAnycallProxies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"anySwapFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"},{"internalType":"address","name":"anycallProxy","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"anySwapInAndExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"}],"name":"anySwapInAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"}],"name":"anySwapInNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"}],"name":"anySwapInUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"},{"internalType":"address","name":"anycallProxy","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"anySwapInUnderlyingAndExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"},{"internalType":"string","name":"anycallProxy","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"anySwapOutAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"toChainID","type":"uint256"},{"internalType":"string","name":"anycallProxy","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"anySwapOutNativeAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"},{"internalType":"string","name":"anycallProxy","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"anySwapOutUnderlyingAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"anycallExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"anycallProxyInfo","outputs":[{"internalType":"bool","name":"supported","type":"bool"},{"internalType":"bool","name":"acceptAnyToken","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mpc","type":"address"}],"name":"changeMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMPC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"proxies","type":"address[]"}],"name":"removeAnycallProxies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"retryRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"swapID","type":"string"},{"components":[{"internalType":"bytes32","name":"swapoutID","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"internalType":"struct SwapInfo","name":"swapInfo","type":"tuple"},{"internalType":"address","name":"anycallProxy","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"dontExec","type":"bool"}],"name":"retrySwapinAndExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerSecurity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_routerSecurity","type":"address"}],"name":"setRouterSecurity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wNATIVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200589338038062005893833981016040819052620000349162000204565b8480856001600160a01b038116620000935760405162461bcd60e51b815260206004820152601c60248201527f4d50433a206d706320697320746865207a65726f20616464726573730000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040514281529091907f581f388e3dd32e1bbf62a290f509c8245f9d0b71ef82614fb2b967ad0a10d5b99060200160405180910390a3506001600160a01b0381166200013f5760405162461bcd60e51b815260206004820152601860248201527f41646d696e436f6e74726f6c3a2061646472657373283029000000000000000060448201526064016200008a565b600480546001600160a01b0319166001600160a01b03928316179055600160065583169050620001b25760405162461bcd60e51b815260206004820152601560248201527f7a65726f20616e7963616c6c206578656375746f72000000000000000000000060448201526064016200008a565b6001600160a01b0391821660a052918116608052600780546001600160a01b0319169290911691909117905550620002749050565b80516001600160a01b0381168114620001ff57600080fd5b919050565b600080600080600060a086880312156200021d57600080fd5b6200022886620001e7565b94506200023860208701620001e7565b93506200024860408701620001e7565b92506200025860608701620001e7565b91506200026860808701620001e7565b90509295509295909350565b60805160a05161559062000303600039600081816106c201528181611f4a015281816131380152613b2001526000818161025a0152818161055401528181610dde01528181610e5c015281816110a80152818161173e0152818161181301528181613fcc01528181614042015281816141140152818161418501528181614203015261425001526155906000f3fe60806040526004361061024a5760003560e01c80638fef848911610139578063d2c7dfcc116100b6578063ed56531a1161007a578063ed56531a1461076b578063f75c26641461078b578063f830e7b4146107ab578063f851a440146107cb578063f91275b5146107eb578063f9ca3a5d1461080d57600080fd5b8063d2c7dfcc146106b0578063e0e9048e146106e4578063e2ea2ba914610704578063e94b714414610724578063ea0c968b1461075857600080fd5b8063a66ec443116100fd578063a66ec4431461061b578063b63b38d01461063b578063c604b0b814610650578063cc95060a14610670578063d21c1cf51461069057600080fd5b80638fef8489146105765780639ac25d08146105965780639e9e4666146105ab5780639ff1d3e8146105db578063a413387a146105fb57600080fd5b80635b7b018c116101c757806381aa7a811161018b57806381aa7a81146104c2578063872acd04146104e257806387cc6e2f146105025780638f283970146105225780638fd903f51461054257600080fd5b80635b7b018c1461041b5780635de263851461043b5780636a42b8f81461045b5780636a6459d1146104725780636b4b4376146104a257600080fd5b80632f4dae9f1161020e5780632f4dae9f14610381578063456862aa146103a15780634e67428d146103d1578063540dd52c146103e65780635598f119146103f957600080fd5b8063049b4e7e1461028e5780630c55b22e146102ae578063160f1053146102e35780631d5aa281146102f9578063267822471461034957600080fd5b3661028957336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461028757610287614788565b005b600080fd5b34801561029a57600080fd5b506102876102a93660046147fc565b61082d565b3480156102ba57600080fd5b506102d06000805160206154fb83398151915281565b6040519081526020015b60405180910390f35b3480156102ef57600080fd5b506102d060025481565b34801561030557600080fd5b50610332610314366004614863565b60086020526000908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152016102da565b34801561035557600080fd5b50600554610369906001600160a01b031681565b6040516001600160a01b0390911681526020016102da565b34801561038d57600080fd5b5061028761039c366004614880565b61094e565b3480156103ad57600080fd5b506103c16103bc366004614899565b610984565b60405190151581526020016102da565b3480156103dd57600080fd5b50610287610a4f565b6102876103f43660046148d2565b610b0f565b34801561040557600080fd5b506102d06000805160206154db83398151915281565b34801561042757600080fd5b50610287610436366004614863565b610c25565b34801561044757600080fd5b50610287610456366004614946565b610d1d565b34801561046757600080fd5b506102d06202a30081565b34801561047e57600080fd5b506103c161048d366004614880565b60096020526000908152604090205460ff1681565b3480156104ae57600080fd5b506102876104bd36600461499b565b6111b2565b3480156104ce57600080fd5b506102876104dd366004614946565b611469565b3480156104ee57600080fd5b506102876104fd366004614a6b565b611a69565b34801561050e57600080fd5b5061028761051d366004614b1a565b61205b565b34801561052e57600080fd5b5061028761053d366004614863565b612197565b34801561054e57600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b34801561058257600080fd5b50610287610591366004614946565b612269565b3480156105a257600080fd5b506102d0600081565b3480156105b757600080fd5b506103c16105c6366004614880565b60009081526003602052604090205460ff1690565b3480156105e757600080fd5b506102876105f6366004614946565b61242e565b34801561060757600080fd5b50600754610369906001600160a01b031681565b34801561062757600080fd5b50610287610636366004614863565b61272f565b34801561064757600080fd5b506102876127a7565b34801561065c57600080fd5b5061028761066b3660046147fc565b6128f9565b34801561067c57600080fd5b5061028761068b366004614b46565b612ad6565b34801561069c57600080fd5b506102876106ab366004614c25565b61326c565b3480156106bc57600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f057600080fd5b506102876106ff36600461499b565b613327565b34801561071057600080fd5b5061028761071f366004614c67565b6134e5565b34801561073057600080fd5b506102d07f42aeccb36e4cd8c38ec0b9ee052287345afef9d7d5211d495f4abc7e1950eb2681565b610287610766366004614cd3565b61364e565b34801561077757600080fd5b50610287610786366004614880565b613825565b34801561079757600080fd5b50600054610369906001600160a01b031681565b3480156107b757600080fd5b50600154610369906001600160a01b031681565b3480156107d757600080fd5b50600454610369906001600160a01b031681565b3480156107f757600080fd5b506102d060008051602061549b83398151915281565b34801561081957600080fd5b50610287610828366004614b46565b613858565b6002600654036108585760405162461bcd60e51b815260040161084f90614d89565b60405180910390fd5b600260065560006108698684613c59565b60075460405163078e2c7d60e51b81529192506000916001600160a01b039091169063f1c58fa0906108a9908a9033908b908b9089908b90600401614de9565b6020604051808303816000875af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190614e52565b9050336001600160a01b0316876001600160a01b0316827f0d969ae475ff6fcaf0dcfa760d4d8607244e8d95e9bf426f8d5d69f9a3e525af898987896040516109389493929190614e6b565b60405180910390a4505060016006555050505050565b6004546001600160a01b031633146109785760405162461bcd60e51b815260040161084f90614e92565b61098181613e82565b50565b60006002600654036109a85760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146109d75760405162461bcd60e51b815260040161084f90614ec9565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a9906024016020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614ef0565b60016006559392505050565b6005546001600160a01b03163314610aa95760405162461bcd60e51b815260206004820152601760248201527f41646d696e436f6e74726f6c3a20466f7262696464656e000000000000000000604482015260640161084f565b6005546004546040516001600160a01b0392831692909116907f6d7e0a4e01cdbbdb3b116a1157c3a2c5165678006563d891c1c700b1238027ca90600090a360058054600480546001600160a01b03199081166001600160a01b03841617909155169055565b600260065403610b315760405162461bcd60e51b815260040161084f90614d89565b60026006556000610b4185613f59565b60075460405163078e2c7d60e51b81529192506000916001600160a01b039091169063f1c58fa090610b8190899033908a908a9089908b90600401614de9565b6020604051808303816000875af1158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc49190614e52565b9050336001600160a01b0316866001600160a01b0316827f0d969ae475ff6fcaf0dcfa760d4d8607244e8d95e9bf426f8d5d69f9a3e525af88888789604051610c109493929190614e6b565b60405180910390a45050600160065550505050565b6000546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161084f90614ec9565b6001600160a01b038116610ca55760405162461bcd60e51b815260206004820152601c60248201527f4d50433a206d706320697320746865207a65726f206164647265737300000000604482015260640161084f565b600180546001600160a01b0319166001600160a01b038316179055610ccd6202a30042614f23565b60028190556001546000546040519283526001600160a01b03918216929116907f581f388e3dd32e1bbf62a290f509c8245f9d0b71ef82614fb2b967ad0a10d5b99060200160405180910390a350565b60008051602061549b833981519152600081905260036020526000805160206154bb8339815191525460ff16158015610d6f575060008052600360205260008051602061551b8339815191525460ff16155b610d8b5760405162461bcd60e51b815260040161084f90614f3b565b600260065403610dad5760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b03163314610ddc5760405162461bcd60e51b815260040161084f90614ec9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e525760405162461bcd60e51b815260206004820152601e60248201527f4d756c7469636861696e526f757465723a207a65726f20774e41544956450000604482015260640161084f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610e8c6040840160208501614863565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed9190614f72565b6001600160a01b031614610f135760405162461bcd60e51b815260040161084f90614f8f565b60075460405163b1f05c5760e01b81526001600160a01b039091169063b1f05c5790610f4790879087908790600401614fda565b600060405180830381600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b50610f8a925050506040830160208401614863565b6001600160a01b03166340c10f193084606001356040518363ffffffff1660e01b8152600401610fbb92919061504c565b6020604051808303816000875af1158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffe9190614ef0565b61100a5761100a614788565b61101a6040830160208401614863565b604051627b8a6760e11b8152606084013560048201523060248201526001600160a01b03919091169062f714ce906044016020604051808303816000875af115801561106a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108e9190614e52565b50604051632e1a7d4d60e01b8152606083013560048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b5061112b92506111219150506060840160408501614863565b83606001356142f4565b61113b6060830160408401614863565b6001600160a01b03166111546040840160208501614863565b6001600160a01b031683600001357f164f647883b52834be7a5219336e455a23a358be27519d0442fc0ee5e1b1ce2e87878760600135886080013560405161119f9493929190614e6b565b60405180910390a4505060016006555050565b6000805160206154fb8339815191526000819052600360205260008051602061553b8339815191525460ff16158015611204575060008052600360205260008051602061551b8339815191525460ff16155b6112205760405162461bcd60e51b815260040161084f90614f3b565b6000805160206154db833981519152600081905260036020527f8463290dfbe0421b3bc53cb3eea84e8b7f290f5e37bad33c89c1038899737d9d5460ff16158015611284575060008052600360205260008051602061551b8339815191525460ff16155b6112a05760405162461bcd60e51b815260040161084f90614f3b565b6002600654036112c25760405162461bcd60e51b815260040161084f90614d89565b6002600655826112e45760405162461bcd60e51b815260040161084f90615065565b6000600760009054906101000a90046001600160a01b03166001600160a01b031663f1c58fa08d338e8e8e8e8e8e8e8e6040518b63ffffffff1660e01b81526004016113399a9998979695949392919061508e565b6020604051808303816000875af1158015611358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137c9190614e52565b604051632770a7eb60e21b81529091506001600160a01b038d1690639dc29fac906113ad9033908d9060040161504c565b6020604051808303816000875af11580156113cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f09190614ef0565b6113fc576113fc614788565b336001600160a01b03168c6001600160a01b0316827f968608314ec29f6fd1a9f6ef9e96247a4da1a683917569706e2d2b60ca7c0a6d8e8e8e8e8e8e8e8e60405161144e989796959493929190615100565b60405180910390a45050600160065550505050505050505050565b60008051602061549b833981519152600081905260036020526000805160206154bb8339815191525460ff161580156114bb575060008052600360205260008051602061551b8339815191525460ff16155b6114d75760405162461bcd60e51b815260040161084f90614f3b565b6002600654036114f95760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146115285760405162461bcd60e51b815260040161084f90614ec9565b60075460405163b1f05c5760e01b81526001600160a01b039091169063b1f05c579061155c90879087908790600401614fda565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b50600092506115a29150506040840160208501614863565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116039190614f72565b90506001600160a01b038116158015906116a7575060608301356001600160a01b0382166370a0823161163c6040870160208801614863565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190614e52565b10155b15611942576116bc6040840160208501614863565b6001600160a01b03166340c10f193085606001356040518363ffffffff1660e01b81526004016116ed92919061504c565b6020604051808303816000875af115801561170c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117309190614ef0565b61173c5761173c614788565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361189b576117856040840160208501614863565b604051627b8a6760e11b8152606085013560048201523060248201526001600160a01b03919091169062f714ce906044016020604051808303816000875af11580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190614e52565b50604051632e1a7d4d60e01b8152606084013560048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561185f57600080fd5b505af1158015611873573d6000803e3d6000fd5b50611896925061188c9150506060850160408601614863565b84606001356142f4565b6119e1565b6118ab6040840160208501614863565b6001600160a01b031662f714ce606085018035906118cc9060408801614863565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044016020604051808303816000875af1158015611918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193c9190614e52565b506119e1565b6119526040840160208501614863565b6001600160a01b03166340c10f196119706060860160408701614863565b85606001356040518363ffffffff1660e01b815260040161199292919061504c565b6020604051808303816000875af11580156119b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d59190614ef0565b6119e1576119e1614788565b6119f16060840160408501614863565b6001600160a01b0316611a0a6040850160208601614863565b6001600160a01b031684600001357f164f647883b52834be7a5219336e455a23a358be27519d0442fc0ee5e1b1ce2e888888606001358960800135604051611a559493929190614e6b565b60405180910390a450506001600655505050565b600260065403611a8b5760405162461bcd60e51b815260040161084f90614d89565b6002600655611aa06060860160408701614863565b6001600160a01b0316336001600160a01b031614611af45760405162461bcd60e51b81526020600482015260116024820152700666f72626964207265747279207377617607c1b604482015260640161084f565b60075460405163047b1d6560e41b81526001600160a01b03909116906347b1d65090611b2f908a908a908a359060808c013590600401614e6b565b602060405180830381865afa158015611b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b709190614ef0565b611bb15760405162461bcd60e51b81526020600482015260126024820152711cddd85c081b9bdd0818dbdb5c1b195d195960721b604482015260640161084f565b600087878735611bc760408a0160208b01614863565b611bd760608b0160408c01614863565b8a606001358b608001358b8b8b604051602001611bfd9a99989796959493929190615157565b60408051601f1981840301815291815281516020928301206000818152600990935291205490915060ff16611c6d5760405162461bcd60e51b81526020600482015260166024820152751c995d1c9e481c9958dbdc99081b9bdd08195e1a5cdd60521b604482015260640161084f565b6000818152600960209081526040808320805460ff19169055611c9591908901908901614863565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190614f72565b90506001600160a01b038116611d1e5760405162461bcd60e51b815260040161084f906151b5565b60608701356001600160a01b0382166370a08231611d4260408b0160208c01614863565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa9190614e52565b1015611df85760405162461bcd60e51b815260206004820152601e60248201527f4d756c7469636861696e526f757465723a207265747279206661696c65640000604482015260640161084f565b611e086040880160208901614863565b6001600160a01b03166340c10f193089606001356040518363ffffffff1660e01b8152600401611e3992919061504c565b6020604051808303816000875af1158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c9190614ef0565b611e8857611e88614788565b611e986040880160208901614863565b6001600160a01b031662f714ce60608901803590611eb99060408c01614863565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044016020604051808303816000875af1158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f299190614e52565b506000606084611fd65760405163135df5ff60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639aefaff890611f8b908b90879060608f0135908d908d906004016151f6565b6000604051808303816000875af1925050508015611fcb57506040513d6000823e601f3d908101601f19168201604052611fc8919081019061526c565b60015b15611fd65790925090505b7f4024f72e00ae47f03ed1dd3ab595d04dabdc9d1f95f8c039bca61946d9da0eb38b8b8b3561200b60408e0160208f01614863565b8d604001602081019061201e9190614863565b8e606001358f608001358c8a8a6040516120419a9998979695949392919061535b565b60405180910390a150506001600655505050505050505050565b60026006540361207d5760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146120ac5760405162461bcd60e51b815260040161084f90614ec9565b6040516340c10f1960e01b81526001600160a01b038316906340c10f19906120da903090859060040161504c565b6020604051808303816000875af11580156120f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211d9190614ef0565b50604051627b8a6760e11b8152600481018290523360248201526001600160a01b0383169062f714ce906044016020604051808303816000875af1158015612169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d9190614e52565b5050600160065550565b6004546001600160a01b031633146121c15760405162461bcd60e51b815260040161084f90614e92565b6001600160a01b0381166122175760405162461bcd60e51b815260206004820152601860248201527f41646d696e436f6e74726f6c3a20616464726573732830290000000000000000604482015260640161084f565b600580546001600160a01b0319166001600160a01b03838116918217909255600454604051919216907fcf9b665e0639e0b81a8db37b60ac7ddf45aeb1b484e11adeb7dff4bf4a3a625890600090a350565b60008051602061549b833981519152600081905260036020526000805160206154bb8339815191525460ff161580156122bb575060008052600360205260008051602061551b8339815191525460ff16155b6122d75760405162461bcd60e51b815260040161084f90614f3b565b6002600654036122f95760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146123285760405162461bcd60e51b815260040161084f90614ec9565b60075460405163b1f05c5760e01b81526001600160a01b039091169063b1f05c579061235c90879087908790600401614fda565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b5061239f925050506040830160208401614863565b6001600160a01b03166340c10f196123bd6060850160408601614863565b84606001356040518363ffffffff1660e01b81526004016123df92919061504c565b6020604051808303816000875af11580156123fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124229190614ef0565b61112b5761112b614788565b60008051602061549b833981519152600081905260036020526000805160206154bb8339815191525460ff16158015612480575060008052600360205260008051602061551b8339815191525460ff16155b61249c5760405162461bcd60e51b815260040161084f90614f3b565b6002600654036124be5760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146124ed5760405162461bcd60e51b815260040161084f90614ec9565b60006124ff6040840160208501614863565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125609190614f72565b6001600160a01b0316036125865760405162461bcd60e51b815260040161084f906151b5565b60075460405163b1f05c5760e01b81526001600160a01b039091169063b1f05c57906125ba90879087908790600401614fda565b600060405180830381600087803b1580156125d457600080fd5b505af11580156125e8573d6000803e3d6000fd5b506125fd925050506040830160208401614863565b6001600160a01b03166340c10f193084606001356040518363ffffffff1660e01b815260040161262e92919061504c565b6020604051808303816000875af115801561264d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126719190614ef0565b61267d5761267d614788565b61268d6040830160208401614863565b6001600160a01b031662f714ce606084018035906126ae9060408701614863565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044016020604051808303816000875af11580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190614e52565b5061113b6060830160408401614863565b6002600654036127515760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146127805760405162461bcd60e51b815260040161084f90614ec9565b600780546001600160a01b0319166001600160a01b03929092169190911790556001600655565b6001546001600160a01b03163314806127e057506000546001600160a01b0316331480156127e057506001546001600160a01b03163b15155b6128245760405162461bcd60e51b81526020600482015260156024820152744d50433a206f6e6c792070656e64696e67206d706360581b604482015260640161084f565b600060025411801561283857506002544210155b6128845760405162461bcd60e51b815260206004820152601960248201527f4d50433a2074696d65206265666f72652064656c61794d504300000000000000604482015260640161084f565b6001546000546040514281526001600160a01b0392831692909116907f8d32c9dd498e08090b44a0f77fe9ec0278851f9dffc4b430428411243e7df0769060200160405180910390a360018054600080546001600160a01b03199081166001600160a01b038416178255909116909155600255565b6000805160206154fb8339815191526000819052600360205260008051602061553b8339815191525460ff1615801561294b575060008052600360205260008051602061551b8339815191525460ff16155b6129675760405162461bcd60e51b815260040161084f90614f3b565b6002600654036129895760405162461bcd60e51b815260040161084f90614d89565b600260065560075460405163078e2c7d60e51b81526000916001600160a01b03169063f1c58fa0906129c9908a9033908b908b908b908b90600401614de9565b6020604051808303816000875af11580156129e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0c9190614e52565b604051632770a7eb60e21b81529091506001600160a01b03881690639dc29fac90612a3d903390889060040161504c565b6020604051808303816000875af1158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a809190614ef0565b612a8c57612a8c614788565b336001600160a01b0316876001600160a01b0316827f0d969ae475ff6fcaf0dcfa760d4d8607244e8d95e9bf426f8d5d69f9a3e525af898989896040516109389493929190614e6b565b60008051602061549b833981519152600081905260036020526000805160206154bb8339815191525460ff16158015612b28575060008052600360205260008051602061551b8339815191525460ff16155b612b445760405162461bcd60e51b815260040161084f90614f3b565b7f42aeccb36e4cd8c38ec0b9ee052287345afef9d7d5211d495f4abc7e1950eb26600081905260036020527f4f3da68f93dc5e453c2f45311a20fe93b66f1ba9b6f3d4751294a8c1cc8848685460ff16158015612bba575060008052600360205260008051602061551b8339815191525460ff16155b612bd65760405162461bcd60e51b815260040161084f90614f3b565b600260065403612bf85760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b03163314612c275760405162461bcd60e51b815260040161084f90614ec9565b6001600160a01b03851660009081526008602052604090205460ff16612c8a5760405162461bcd60e51b8152602060048201526018602482015277756e737570706f7274656420616e63616c6c2070726f787960401b604482015260640161084f565b60075460405163b1f05c5760e01b81526001600160a01b039091169063b1f05c5790612cbe908b908b908b90600401614fda565b600060405180830381600087803b158015612cd857600080fd5b505af1158015612cec573d6000803e3d6000fd5b50505050600080876020016020810190612d069190614863565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d679190614f72565b90506001600160a01b038116612d8f5760405162461bcd60e51b815260040161084f906151b5565b60608801356001600160a01b0382166370a08231612db360408c0160208d01614863565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1b9190614e52565b10612f5a57905080612e336040890160208a01614863565b6001600160a01b03166340c10f19308a606001356040518363ffffffff1660e01b8152600401612e6492919061504c565b6020604051808303816000875af1158015612e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea79190614ef0565b612eb357612eb3614788565b612ec36040890160208a01614863565b6001600160a01b031662f714ce60608a01803590612ee49060408d01614863565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044016020604051808303816000875af1158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f549190614e52565b50613131565b6001600160a01b038716600090815260086020526040902054610100900460ff161561303657612f906040890160208a01614863565b9150612fa26040890160208a01614863565b6001600160a01b03166340c10f19612fc060608b0160408c01614863565b8a606001356040518363ffffffff1660e01b8152600401612fe292919061504c565b6020604051808303816000875af1158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190614ef0565b61303157613031614788565b613131565b60008a8a8a3561304c60408d0160208e01614863565b61305c60608e0160408f01614863565b8d606001358e608001358e8e8e6040516020016130829a99989796959493929190615157565b60408051601f198184030181529181528151602092830120600081815260098452829020805460ff1916600117905592507f2d044017b61f24f5423ce5e0c62f9ead27cb38f1615069e703ba521d0b04696b918d918d918d35916130eb91908f01908f01614863565b8d60400160208101906130fe9190614863565b8e606001358f608001358f8f8f6040516131219a99989796959493929190615157565b60405180910390a150505061325d565b50600060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aefaff889858c606001358b8b6040518663ffffffff1660e01b815260040161318e9594939291906151f6565b6000604051808303816000875af19250505080156131ce57506040513d6000823e601f3d908101601f191682016040526131cb919081019061526c565b60015b156131d95790925090505b6131e960608a0160408b01614863565b6001600160a01b031661320260408b0160208c01614863565b6001600160a01b03168a600001357f603ea9944a12c4ef108a97399c705891f182d169a361b6aa6455d14aa1cdd2588e8e8e606001358f608001358989604051613251969594939291906153c1565b60405180910390a45050505b50506001600655505050505050565b60026006540361328e5760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146132bd5760405162461bcd60e51b815260040161084f90614ec9565b60005b8181101561218d57600860008484848181106132de576132de615408565b90506020020160208101906132f39190614863565b6001600160a01b031681526020810191909152604001600020805461ffff191690558061331f8161541e565b9150506132c0565b6000805160206154db833981519152600081905260036020527f8463290dfbe0421b3bc53cb3eea84e8b7f290f5e37bad33c89c1038899737d9d5460ff1615801561338b575060008052600360205260008051602061551b8339815191525460ff16155b6133a75760405162461bcd60e51b815260040161084f90614f3b565b6002600654036133c95760405162461bcd60e51b815260040161084f90614d89565b6002600655816133eb5760405162461bcd60e51b815260040161084f90615065565b60006133f78b89613c59565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663f1c58fa08d338e8e878e8e8e8e8e6040518b63ffffffff1660e01b815260040161344e9a9998979695949392919061508e565b6020604051808303816000875af115801561346d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134919190614e52565b9050336001600160a01b03168c6001600160a01b0316827f968608314ec29f6fd1a9f6ef9e96247a4da1a683917569706e2d2b60ca7c0a6d8e8e878e8e8e8e8e60405161144e989796959493929190615100565b6002600654036135075760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146135365760405162461bcd60e51b815260040161084f90614ec9565b828181146135785760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604482015260640161084f565b60005b818110156136415760405180604001604052806001151581526020018585848181106135a9576135a9615408565b90506020020160208101906135be9190615437565b15159052600860008888858181106135d8576135d8615408565b90506020020160208101906135ed9190614863565b6001600160a01b0316815260208082019290925260400160002082518154939092015115156101000261ff00199215159290921661ffff1990931692909217179055806136398161541e565b91505061357b565b5050600160065550505050565b6000805160206154db833981519152600081905260036020527f8463290dfbe0421b3bc53cb3eea84e8b7f290f5e37bad33c89c1038899737d9d5460ff161580156136b2575060008052600360205260008051602061551b8339815191525460ff16155b6136ce5760405162461bcd60e51b815260040161084f90614f3b565b6002600654036136f05760405162461bcd60e51b815260040161084f90614d89565b6002600655816137125760405162461bcd60e51b815260040161084f90615065565b600061371d8a613f59565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663f1c58fa08c338d8d878e8e8e8e8e6040518b63ffffffff1660e01b81526004016137749a9998979695949392919061508e565b6020604051808303816000875af1158015613793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b79190614e52565b9050336001600160a01b03168b6001600160a01b0316827f968608314ec29f6fd1a9f6ef9e96247a4da1a683917569706e2d2b60ca7c0a6d8d8d878e8e8e8e8e60405161380b989796959493929190615100565b60405180910390a450506001600655505050505050505050565b6004546001600160a01b0316331461384f5760405162461bcd60e51b815260040161084f90614e92565b61098181614412565b60008051602061549b833981519152600081905260036020526000805160206154bb8339815191525460ff161580156138aa575060008052600360205260008051602061551b8339815191525460ff16155b6138c65760405162461bcd60e51b815260040161084f90614f3b565b7f42aeccb36e4cd8c38ec0b9ee052287345afef9d7d5211d495f4abc7e1950eb26600081905260036020527f4f3da68f93dc5e453c2f45311a20fe93b66f1ba9b6f3d4751294a8c1cc8848685460ff1615801561393c575060008052600360205260008051602061551b8339815191525460ff16155b6139585760405162461bcd60e51b815260040161084f90614f3b565b60026006540361397a5760405162461bcd60e51b815260040161084f90614d89565b60026006556000546001600160a01b031633146139a95760405162461bcd60e51b815260040161084f90614ec9565b6001600160a01b03851660009081526008602052604090205460ff16613a0c5760405162461bcd60e51b8152602060048201526018602482015277756e737570706f7274656420616e63616c6c2070726f787960401b604482015260640161084f565b60075460405163b1f05c5760e01b81526001600160a01b039091169063b1f05c5790613a40908b908b908b90600401614fda565b600060405180830381600087803b158015613a5a57600080fd5b505af1158015613a6e573d6000803e3d6000fd5b50613a83925050506040870160208801614863565b6001600160a01b03166340c10f19613aa16060890160408a01614863565b88606001356040518363ffffffff1660e01b8152600401613ac392919061504c565b6020604051808303816000875af1158015613ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b069190614ef0565b613b1257613b12614788565b600060606001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639aefaff888613b5660408c0160208d01614863565b8b606001358a8a6040518663ffffffff1660e01b8152600401613b7d9594939291906151f6565b6000604051808303816000875af1925050508015613bbd57506040513d6000823e601f3d908101601f19168201604052613bba919081019061526c565b60015b15613bc85790925090505b613bd86060890160408a01614863565b6001600160a01b0316613bf160408a0160208b01614863565b6001600160a01b031689600001357f603ea9944a12c4ef108a97399c705891f182d169a361b6aa6455d14aa1cdd2588d8d8d606001358e608001358989604051613c40969594939291906153c1565b60405180910390a4505060016006555050505050505050565b6000805160206154fb8339815191526000818152600360205260008051602061553b8339815191525490919060ff16158015613cae575060008052600360205260008051602061551b8339815191525460ff16155b613cca5760405162461bcd60e51b815260040161084f90614f3b565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d2e9190614f72565b90506001600160a01b038116613d565760405162461bcd60e51b815260040161084f906151b5565b6040516370a0823160e01b81526001600160a01b038681166004830152600091908316906370a0823190602401602060405180830381865afa158015613da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc49190614e52565b9050613ddb6001600160a01b0383163388886144b3565b6040516370a0823160e01b81526001600160a01b038781166004830152600091908416906370a0823190602401602060405180830381865afa158015613e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e499190614e52565b9050818110158015613e645750613e608683614f23565b8111155b613e6d57600080fd5b613e778282615454565b979650505050505050565b600081815260036020526040902054819060ff1680613eb9575060008052600360205260008051602061551b8339815191525460ff165b613f055760405162461bcd60e51b815260206004820152601b60248201527f5061757361626c65436f6e74726f6c3a206e6f74207061757365640000000000604482015260640161084f565b60008281526003602052604090819020805460ff19169055517fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a90613f4d9084815260200190565b60405180910390a15050565b6000805160206154fb8339815191526000818152600360205260008051602061553b8339815191525490919060ff16158015613fae575060008052600360205260008051602061551b8339815191525460ff16155b613fca5760405162461bcd60e51b815260040161084f90614f3b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166140405760405162461bcd60e51b815260206004820152601e60248201527f4d756c7469636861696e526f757465723a207a65726f20774e41544956450000604482015260640161084f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140cc9190614f72565b6001600160a01b0316146140f25760405162461bcd60e51b815260040161084f90614f8f565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561415d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141819190614e52565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156141de57600080fd5b505af11580156141f2573d6000803e3d6000fd5b5061422e9350506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915086905034614524565b6040516370a0823160e01b81526001600160a01b0385811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015614299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142bd9190614e52565b90508181101580156142d857506142d43483614f23565b8111155b6142e157600080fd5b6142eb8282615454565b95945050505050565b804710156143445760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161084f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614391576040519150601f19603f3d011682016040523d82523d6000602084013e614396565b606091505b505090508061440d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161084f565b505050565b600081815260036020526040902054819060ff1615801561444c575060008052600360205260008051602061551b8339815191525460ff16155b6144685760405162461bcd60e51b815260040161084f90614f3b565b60008281526003602052604090819020805460ff19166001179055517f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3190613f4d9084815260200190565b6040516001600160a01b038085166024830152831660448201526064810182905261451e9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614543565b50505050565b61440d8363a9059cbb60e01b84846040516024016144e792919061504c565b6000614598826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166146159092919063ffffffff16565b80519091501561440d57808060200190518101906145b69190614ef0565b61440d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161084f565b6060614624848460008561462e565b90505b9392505050565b60608247101561468f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161084f565b6001600160a01b0385163b6146e65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161084f565b600080866001600160a01b03168587604051614702919061546b565b60006040518083038185875af1925050503d806000811461473f576040519150601f19603f3d011682016040523d82523d6000602084013e614744565b606091505b5091509150613e778282866060831561475e575081614627565b82511561476e5782518084602001fd5b8160405162461bcd60e51b815260040161084f9190615487565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461098157600080fd5b60008083601f8401126147c557600080fd5b50813567ffffffffffffffff8111156147dd57600080fd5b6020830191508360208285010111156147f557600080fd5b9250929050565b60008060008060006080868803121561481457600080fd5b853561481f8161479e565b9450602086013567ffffffffffffffff81111561483b57600080fd5b614847888289016147b3565b9699909850959660408101359660609091013595509350505050565b60006020828403121561487557600080fd5b81356146278161479e565b60006020828403121561489257600080fd5b5035919050565b600080604083850312156148ac57600080fd5b82356148b78161479e565b915060208301356148c78161479e565b809150509250929050565b600080600080606085870312156148e857600080fd5b84356148f38161479e565b9350602085013567ffffffffffffffff81111561490f57600080fd5b61491b878288016147b3565b9598909750949560400135949350505050565b600060a0828403121561494057600080fd5b50919050565b600080600060c0848603121561495b57600080fd5b833567ffffffffffffffff81111561497257600080fd5b61497e868287016147b3565b90945092506149929050856020860161492e565b90509250925092565b600080600080600080600080600060c08a8c0312156149b957600080fd5b89356149c48161479e565b985060208a013567ffffffffffffffff808211156149e157600080fd5b6149ed8d838e016147b3565b909a50985060408c0135975060608c0135965060808c0135915080821115614a1457600080fd5b614a208d838e016147b3565b909650945060a08c0135915080821115614a3957600080fd5b50614a468c828d016147b3565b915080935050809150509295985092959850929598565b801515811461098157600080fd5b6000806000806000806000610120888a031215614a8757600080fd5b873567ffffffffffffffff80821115614a9f57600080fd5b614aab8b838c016147b3565b9099509750879150614ac08b60208c0161492e565b965060c08a01359150614ad28261479e565b90945060e08901359080821115614ae857600080fd5b50614af58a828b016147b3565b909450925050610100880135614b0a81614a5d565b8091505092959891949750929550565b60008060408385031215614b2d57600080fd5b8235614b388161479e565b946020939093013593505050565b6000806000806000806101008789031215614b6057600080fd5b863567ffffffffffffffff80821115614b7857600080fd5b614b848a838b016147b3565b9098509650869150614b998a60208b0161492e565b955060c08901359150614bab8261479e565b90935060e08801359080821115614bc157600080fd5b50614bce89828a016147b3565b979a9699509497509295939492505050565b60008083601f840112614bf257600080fd5b50813567ffffffffffffffff811115614c0a57600080fd5b6020830191508360208260051b85010111156147f557600080fd5b60008060208385031215614c3857600080fd5b823567ffffffffffffffff811115614c4f57600080fd5b614c5b85828601614be0565b90969095509350505050565b60008060008060408587031215614c7d57600080fd5b843567ffffffffffffffff80821115614c9557600080fd5b614ca188838901614be0565b90965094506020870135915080821115614cba57600080fd5b50614cc787828801614be0565b95989497509550505050565b60008060008060008060008060a0898b031215614cef57600080fd5b8835614cfa8161479e565b9750602089013567ffffffffffffffff80821115614d1757600080fd5b614d238c838d016147b3565b909950975060408b0135965060608b0135915080821115614d4357600080fd5b614d4f8c838d016147b3565b909650945060808b0135915080821115614d6857600080fd5b50614d758b828c016147b3565b999c989b5096995094979396929594505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0387811682528616602082015260e060408201819052600090614e169083018688614dc0565b8460608401528360808401528281038060a0850152600082526020810160c0850152506000602082015260408101915050979650505050505050565b600060208284031215614e6457600080fd5b5051919050565b606081526000614e7f606083018688614dc0565b6020830194909452506040015292915050565b60208082526017908201527f41646d696e436f6e74726f6c3a206e6f742061646d696e000000000000000000604082015260600190565b6020808252600d908201526c4d50433a206f6e6c79206d706360981b604082015260600190565b600060208284031215614f0257600080fd5b815161462781614a5d565b634e487b7160e01b600052601160045260246000fd5b60008219821115614f3657614f36614f0d565b500190565b60208082526017908201527f5061757361626c65436f6e74726f6c3a20706175736564000000000000000000604082015260600190565b600060208284031215614f8457600080fd5b81516146278161479e565b6020808252602b908201527f4d756c7469636861696e526f757465723a20756e6465726c79696e672069732060408201526a6e6f7420774e415449564560a81b606082015260800190565b60c081526000614fee60c083018587614dc0565b90508235602083015260208301356150058161479e565b6001600160a01b03908116604084810191909152840135906150268261479e565b8082166060850152505060608301356080830152608083013560a0830152949350505050565b6001600160a01b03929092168252602082015260400190565b6020808252600f908201526e656d7074792063616c6c206461746160881b604082015260600190565b6001600160a01b038b811682528a16602082015260e0604082018190526000906150bb9083018a8c614dc0565b88606084015287608084015282810360a08401526150da818789614dc0565b905082810360c08401526150ef818587614dc0565b9d9c50505050505050505050505050565b60a08152600061511460a083018a8c614dc0565b8860208401528760408401528281036060840152615133818789614dc0565b90508281036080840152615148818587614dc0565b9b9a5050505050505050505050565b600061010080835261516c8184018d8f614dc0565b602084018c90526001600160a01b038b811660408601528a81166060860152608085018a905260a08501899052871660c085015283810360e085015290506150ef818587614dc0565b60208082526021908201527f4d756c7469636861696e526f757465723a207a65726f20756e6465726c79696e6040820152606760f81b606082015260800190565b6001600160a01b0386811682528516602082015260408101849052608060608201819052600090613e779083018486614dc0565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561525b578181015183820152602001615243565b8381111561451e5750506000910152565b6000806040838503121561527f57600080fd5b825161528a81614a5d565b602084015190925067ffffffffffffffff808211156152a857600080fd5b818501915085601f8301126152bc57600080fd5b8151818111156152ce576152ce61522a565b604051601f8201601f19908116603f011681019083821181831017156152f6576152f661522a565b8160405282815288602084870101111561530f57600080fd5b615320836020830160208801615240565b80955050505050509250929050565b60008151808452615347816020860160208601615240565b601f01601f19169290920160200192915050565b60006101208083526153708184018d8f614dc0565b602084018c90526001600160a01b038b811660408601528a1660608501526080840189905260a0840188905286151560c085015285151560e085015283810361010085015290506150ef818561532f565b60a0815260006153d560a08301888a614dc0565b866020840152856040840152841515606084015282810360808401526153fb818561532f565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161543057615430614f0d565b5060010190565b60006020828403121561544957600080fd5b813561462781614a5d565b60008282101561546657615466614f0d565b500390565b6000825161547d818460208701615240565b9190910192915050565b602081526000614627602083018461532f56fe9246b6a221bc8c80334eddce2febc232b5cab9fba8e96ff92acabffc5920ef32978db8e2e69e17eb3133914c6addcc25651a880789aa83dfbe511ea8595a9ecaf1fb9f45325ee45a8708aacc208b1051219c6c4134780d77ec04c67aea218abf6353028a1e62f134c5974e9ee55a946683badabdaaaa0bfabd235a446273e0473617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92effda5c05d0182451558d3c45764ab714882cb182837e20692dd04b3a77d254bc21a26469706673582212207094eaa6fd197fad6a7de0eba1b4d4e566f3d0c12f5ebe91a98ea62eb6e36dd364736f6c634300080e0033000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000acff45ac056e9ab186b56725a83b3e48d7db43250000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000004518231a8fdf6ac553b9bbd51bbb86825b583263000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000acff45ac056e9ab186b56725a83b3e48d7db43250000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000004518231a8fdf6ac553b9bbd51bbb86825b583263000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
-----Decoded View---------------
Arg [0] : _admin (address): 0xfa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : _mpc (address): 0xacff45ac056e9ab186b56725a83b3e48d7db4325
Arg [2] : _wNATIVE (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [3] : _anycallExecutor (address): 0x4518231a8fdf6ac553b9bbd51bbb86825b583263
Arg [4] : _routerSecurity (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : 000000000000000000000000acff45ac056e9ab186b56725a83b3e48d7db4325
Arg [2] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [3] : 0000000000000000000000004518231a8fdf6ac553b9bbd51bbb86825b583263
Arg [4] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Deployed ByteCode Sourcemap
24970:22956:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27800:10;-1:-1:-1;;;;;27814:7:0;27800:21;;27793:29;;;;:::i;:::-;24970:22956;;;;;31553:650;;;;;;;;;;-1:-1:-1;31553:650:0;;;;;:::i;:::-;;:::i;25266:87::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25266:87:0;;;;;1469:25:1;;;1457:2;1442:18;25266:87:0;;;;;;;;18519:23;;;;;;;;;;;;;;;;25734:53;;;;;;;;;;-1:-1:-1;25734:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2126:14:1;;2119:22;2101:41;;2185:14;;2178:22;2173:2;2158:18;;2151:50;2074:18;25734:53:0;1939:268:1;20989:27:0;;;;;;;;;;-1:-1:-1;20989:27:0;;;;-1:-1:-1;;;;;20989:27:0;;;;;;-1:-1:-1;;;;;2376:32:1;;;2358:51;;2346:2;2331:18;20989:27:0;2212:203:1;22187:83:0;;;;;;;;;;-1:-1:-1;22187:83:0;;;;;:::i;:::-;;:::i;28072:212::-;;;;;;;;;;-1:-1:-1;28072:212:0;;;;;:::i;:::-;;:::i;:::-;;;3163:14:1;;3156:22;3138:41;;3126:2;3111:18;28072:212:0;2998:187:1;21628:226:0;;;;;;;;;;;;;:::i;34111:617::-;;;;;;:::i;:::-;;:::i;25360:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25360:72:0;;19036:256;;;;;;;;;;-1:-1:-1;19036:256:0;;;;;:::i;:::-;;:::i;37502:1031::-;;;;;;;;;;-1:-1:-1;37502:1031:0;;;;;:::i;:::-;;:::i;18474:38::-;;;;;;;;;;;;18506:6;18474:38;;25794:44;;;;;;;;;;-1:-1:-1;25794:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29813:933;;;;;;;;;;-1:-1:-1;29813:933:0;;;;;:::i;:::-;;:::i;38670:1626::-;;;;;;;;;;-1:-1:-1;38670:1626:0;;;;;:::i;:::-;;:::i;45348:2283::-;;;;;;;;;;-1:-1:-1;45348:2283:0;;;;;:::i;:::-;;:::i;47681:242::-;;;;;;;;;;-1:-1:-1;47681:242:0;;;;;:::i;:::-;;:::i;21414:206::-;;;;;;;;;;-1:-1:-1;21414:206:0;;;;;:::i;:::-;;:::i;25520:32::-;;;;;;;;;;;;;;;35787:642;;;;;;;;;;-1:-1:-1;35787:642:0;;;;;:::i;:::-;;:::i;19934:45::-;;;;;;;;;;-1:-1:-1;19934:45:0;19975:4;19934:45;;20435:109;;;;;;;;;;-1:-1:-1;20435:109:0;;;;;:::i;:::-;20494:4;20518:18;;;:12;:18;;;;;;;;;20435:109;36542:851;;;;;;;;;;-1:-1:-1;36542:851:0;;;;;:::i;:::-;;:::i;25608:29::-;;;;;;;;;;-1:-1:-1;25608:29:0;;;;-1:-1:-1;;;;;25608:29:0;;;27899:165;;;;;;;;;;-1:-1:-1;27899:165:0;;;;;:::i;:::-;;:::i;19300:452::-;;;;;;;;;;;;;:::i;29106:576::-;;;;;;;;;;-1:-1:-1;29106:576:0;;;;;:::i;:::-;;:::i;41818:3262::-;;;;;;;;;;-1:-1:-1;41818:3262:0;;;;;:::i;:::-;;:::i;28765:245::-;;;;;;;;;;-1:-1:-1;28765:245:0;;;;;:::i;:::-;;:::i;25559:40::-;;;;;;;;;;;;;;;32363:877;;;;;;;;;;-1:-1:-1;32363:877:0;;;;;:::i;:::-;;:::i;28292:465::-;;;;;;;;;;-1:-1:-1;28292:465:0;;;;;:::i;:::-;;:::i;25439:72::-;;;;;;;;;;;;25482:29;25439:72;;34863:844;;;;;;:::i;:::-;;:::i;22100:79::-;;;;;;;;;;-1:-1:-1;22100:79:0;;;;;:::i;:::-;;:::i;18415:18::-;;;;;;;;;;-1:-1:-1;18415:18:0;;;;-1:-1:-1;;;;;18415:18:0;;;18440:25;;;;;;;;;;-1:-1:-1;18440:25:0;;;;-1:-1:-1;;;;;18440:25:0;;;20962:20;;;;;;;;;;-1:-1:-1;20962:20:0;;;;-1:-1:-1;;;;;20962:20:0;;;25174:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25174:85:0;;40376:1329;;;;;;;;;;-1:-1:-1;40376:1329:0;;;;;:::i;:::-;;:::i;31553:650::-;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;;;;;;;;;17317:1;18048:7;:18;31729::::1;31750:36;31772:5:::0;31779:6;31750:21:::1;:36::i;:::-;31833:14;::::0;31817:203:::1;::::0;-1:-1:-1;;;31817:203:0;;31729:57;;-1:-1:-1;31797:17:0::1;::::0;-1:-1:-1;;;;;31833:14:0;;::::1;::::0;31817:47:::1;::::0;:203:::1;::::0;31879:5;;31899:10:::1;::::0;31924:2;;;;31729:57;;31966:9;;31817:203:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31797:223;;32108:10;-1:-1:-1::0;;;;;32036:159:0::1;32088:5;-1:-1:-1::0;;;;;32036:159:0::1;32064:9;32036:159;32133:2;;32150:10;32175:9;32036:159;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0;18227:7;:22;-1:-1:-1;;;;;31553:650:0:o;22187:83::-;21353:5;;-1:-1:-1;;;;;21353:5:0;21339:10;:19;21331:55;;;;-1:-1:-1;;;21331:55:0;;;;;;;:::i;:::-;22248:14:::1;22257:4;22248:8;:14::i;:::-;22187:83:::0;:::o;28072:212::-;28201:4;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;18603:3:::1;::::0;-1:-1:-1;;;;;18603:3:0::1;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::1;;;;;;;:::i;:::-;28230:46:::2;::::0;-1:-1:-1;;;28230:46:0;;-1:-1:-1;;;;;2376:32:1;;;28230:46:0::2;::::0;::::2;2358:51:1::0;28230:36:0;::::2;::::0;::::2;::::0;2331:18:1;;28230:46:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17273:1:::0;18227:7;:22;28223:53;28072:212;-1:-1:-1;;;28072:212:0:o;21628:226::-;21692:12;;-1:-1:-1;;;;;21692:12:0;21678:10;:26;21670:62;;;;-1:-1:-1;;;21670:62:0;;14559:2:1;21670:62:0;;;14541:21:1;14598:2;14578:18;;;14571:30;14637:25;14617:18;;;14610:53;14680:18;;21670:62:0;14357:347:1;21670:62:0;21766:12;;21759:5;;21748:31;;-1:-1:-1;;;;;21766:12:0;;;;21759:5;;;;21748:31;;21766:12;;21748:31;21798:12;;;21790:5;:20;;-1:-1:-1;;;;;;21790:20:0;;;-1:-1:-1;;;;;21798:12:0;;21790:20;;;;21821:25;;;21628:226::o;34111:617::-;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;34266::::1;34287:24;34305:5:::0;34287:17:::1;:24::i;:::-;34358:14;::::0;34342:203:::1;::::0;-1:-1:-1;;;34342:203:0;;34266:45;;-1:-1:-1;34322:17:0::1;::::0;-1:-1:-1;;;;;34358:14:0;;::::1;::::0;34342:47:::1;::::0;:203:::1;::::0;34404:5;;34424:10:::1;::::0;34449:2;;;;34266:45;;34491:9;;34342:203:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34322:223;;34633:10;-1:-1:-1::0;;;;;34561:159:0::1;34613:5;-1:-1:-1::0;;;;;34561:159:0::1;34589:9;34561:159;34658:2;;34675:10;34700:9;34561:159;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0;18227:7;:22;-1:-1:-1;;;;34111:617:0:o;19036:256::-;18603:3;;-1:-1:-1;;;;;18603:3:0;18589:10;:17;18581:43;;;;-1:-1:-1;;;18581:43:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19105:18:0;::::1;19097:59;;;::::0;-1:-1:-1;;;19097:59:0;;14911:2:1;19097:59:0::1;::::0;::::1;14893:21:1::0;14950:2;14930:18;;;14923:30;14989;14969:18;;;14962:58;15037:18;;19097:59:0::1;14709:352:1::0;19097:59:0::1;19167:10;:17:::0;;-1:-1:-1;;;;;;19167:17:0::1;-1:-1:-1::0;;;;;19167:17:0;::::1;;::::0;;19206:23:::1;18506:6;19206:15;:23;:::i;:::-;19195:8;:34:::0;;;19263:10:::1;::::0;::::1;19258:3:::0;19245:39:::1;::::0;1469:25:1;;;-1:-1:-1;;;;;19263:10:0;;::::1;::::0;19258:3;::::1;::::0;19245:39:::1;::::0;1457:2:1;1442:18;19245:39:0::1;;;;;;;19036:256:::0;:::o;37502:1031::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;18603:3:::2;::::0;-1:-1:-1;;;;;18603:3:0::2;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::2;;;;;;;:::i;:::-;37703:7:::3;-1:-1:-1::0;;;;;37703:21:0::3;37695:64;;;::::0;-1:-1:-1;;;37695:64:0;;15885:2:1;37695:64:0::3;::::0;::::3;15867:21:1::0;15924:2;15904:18;;;15897:30;15963:32;15943:18;;;15936:60;16013:18;;37695:64:0::3;15683:354:1::0;37695:64:0::3;-1:-1:-1::0;;;;;37836:7:0::3;37792:51;37804:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;37792:38:0::3;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37792:51:0::3;;37770:144;;;;-1:-1:-1::0;;;37770:144:0::3;;;;;;;:::i;:::-;37941:14;::::0;37925:64:::3;::::0;-1:-1:-1;;;37925:64:0;;-1:-1:-1;;;;;37941:14:0;;::::3;::::0;37925:46:::3;::::0;:64:::3;::::0;37972:6;;;;37980:8;;37925:64:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;38037:14:0::3;::::0;-1:-1:-1;;;38037:14:0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;38021:36:0::3;;38066:4;38073:8;:15;;;38021:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38000:100;;;;:::i;:::-;38123:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;38111:68;::::0;-1:-1:-1;;;38111:68:0;;38148:15:::3;::::0;::::3;;38111:68;::::0;::::3;18019:25:1::0;38173:4:0::3;18060:18:1::0;;;18053:60;-1:-1:-1;;;;;38111:36:0;;;::::3;::::0;::::3;::::0;17992:18:1;;38111:68:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;38190:43:0::3;::::0;-1:-1:-1;;;38190:43:0;;38217:15:::3;::::0;::::3;;38190:43;::::0;::::3;1469:25:1::0;38199:7:0::3;-1:-1:-1::0;;;;;38190:26:0::3;::::0;::::3;::::0;1442:18:1;;38190:43:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;38244:62:0::3;::::0;-1:-1:-1;38270:17:0::3;::::0;-1:-1:-1;;38270:17:0;;;::::3;::::0;::::3;;:::i;:::-;38290:8;:15;;;38244:17;:62::i;:::-;38432:17;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;38322:203:0::3;38403:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;38322:203:0::3;38370:8;:18;;;38322:203;38349:6;;38464:8;:15;;;38494:8;:20;;;38322:203;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0::1;18227:7;:22:::0;-1:-1:-1;;37502:1031:0:o;29813:933::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;;;;;20128:13:::1;:40;;;;-1:-1:-1::0;19975:4:0::1;20518:18:::0;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23:::1;20128:40;20106:113;;;;-1:-1:-1::0;;;20106:113:0::1;;;;;;;:::i;:::-;17317:1:::2;17915:7;;:19:::0;17907:63:::2;;;;-1:-1:-1::0;;;17907:63:0::2;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;30171:15;30163:43:::3;;;;-1:-1:-1::0;;;30163:43:0::3;;;;;;;:::i;:::-;30217:17;30253:14;;;;;;;;;-1:-1:-1::0;;;;;30253:14:0::3;-1:-1:-1::0;;;;;30237:47:0::3;;30299:5;30319:10;30344:2;;30361:6;30382:9;30406:12;;30433:4;;30237:211;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30466:47;::::0;-1:-1:-1;;;30466:47:0;;30217:231;;-1:-1:-1;;;;;;30466:27:0;::::3;::::0;::::3;::::0;:47:::3;::::0;30494:10:::3;::::0;30506:6;;30466:47:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30459:55;;;;:::i;:::-;30609:10;-1:-1:-1::0;;;;;30530:208:0::3;30589:5;-1:-1:-1::0;;;;;30530:208:0::3;30565:9;30530:208;30634:2;;30651:6;30672:9;30696:12;;30723:4;;30530:208;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0::2;18227:7;:22:::0;-1:-1:-1;;;;;;;;;;29813:933:0:o;38670:1626::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;18603:3:::2;::::0;-1:-1:-1;;;;;18603:3:0::2;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::2;;;;;;;:::i;:::-;38877:14:::3;::::0;38861:64:::3;::::0;-1:-1:-1;;;38861:64:0;;-1:-1:-1;;;;;38877:14:0;;::::3;::::0;38861:46:::3;::::0;:64:::3;::::0;38908:6;;;;38916:8;;38861:64:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;38936:19:0::3;::::0;-1:-1:-1;38970:14:0::3;::::0;-1:-1:-1;;38970:14:0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;38958:38:0::3;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38936:62:::0;-1:-1:-1;;;;;;39027:25:0;::::3;::::0;;::::3;::::0;:106:::3;;-1:-1:-1::0;39118:15:0::3;::::0;::::3;;-1:-1:-1::0;;;;;39069:29:0;::::3;;39099:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;39069:45;::::0;-1:-1:-1;;;;;;39069:45:0::3;::::0;;;;;;-1:-1:-1;;;;;2376:32:1;;;39069:45:0::3;::::0;::::3;2358:51:1::0;2331:18;;39069:45:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;;39027:106;39009:1061;;;39201:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;39185:36:0::3;;39252:4;39280:8;:15;;;39185:129;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39160:169;;;;:::i;:::-;39363:7;-1:-1:-1::0;;;;;39348:22:0::3;:11;-1:-1:-1::0;;;;;39348:22:0::3;::::0;39344:509:::3;;39403:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;39391:129;::::0;-1:-1:-1;;;39391:129:0;;39450:15:::3;::::0;::::3;;39391:129;::::0;::::3;18019:25:1::0;39496:4:0::3;18060:18:1::0;;;18053:60;-1:-1:-1;;;;;39391:36:0;;;::::3;::::0;::::3;::::0;17992:18:1;;39391:129:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;39539:43:0::3;::::0;-1:-1:-1;;;39539:43:0;;39566:15:::3;::::0;::::3;;39539:43;::::0;::::3;1469:25:1::0;39548:7:0::3;-1:-1:-1::0;;;;;39539:26:0::3;::::0;::::3;::::0;1442:18:1;;39539:43:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;39601:62:0::3;::::0;-1:-1:-1;39627:17:0::3;::::0;-1:-1:-1;;39627:17:0;;;::::3;::::0;::::3;;:::i;:::-;39647:8;:15;;;39601:17;:62::i;:::-;39009:1061;;39344:509;39716:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;39704:36:0::3;;39763:15;::::0;::::3;::::0;::::3;::::0;39801:17:::3;::::0;::::3;::::0;::::3;;:::i;:::-;39704:133;::::0;-1:-1:-1;;;;;;39704:133:0::3;::::0;;;;;;::::3;::::0;::::3;18019:25:1::0;;;;-1:-1:-1;;;;;18080:32:1;18060:18;;;18053:60;17992:18;;39704:133:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39009:1061;;;39926:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;39910:36:0::3;;39969:17;::::0;;;::::3;::::0;::::3;;:::i;:::-;40009:8;:15;;;39910:133;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39885:173;;;;:::i;:::-;40195:17;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;40085:203:0::3;40166:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;40085:203:0::3;40133:8;:18;;;40085:203;40112:6;;40227:8;:15;;;40257:8;:20;;;40085:203;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0::1;18227:7;:22:::0;-1:-1:-1;;;38670:1626:0:o;45348:2283::-;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;45593:17:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;45579:31:0::1;:10;-1:-1:-1::0;;;;;45579:31:0::1;;45571:61;;;::::0;-1:-1:-1;;;45571:61:0;;20609:2:1;45571:61:0::1;::::0;::::1;20591:21:1::0;20648:2;20628:18;;;20621:30;-1:-1:-1;;;20667:18:1;;;20660:47;20724:18;;45571:61:0::1;20407:341:1::0;45571:61:0::1;45681:14;::::0;45665:163:::1;::::0;-1:-1:-1;;;45665:163:0;;-1:-1:-1;;;;;45681:14:0;;::::1;::::0;45665:47:::1;::::0;:163:::1;::::0;45731:6;;;;45756:18;::::1;::::0;45793:20:::1;::::0;::::1;;::::0;45665:163:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45643:231;;;::::0;-1:-1:-1;;;45643:231:0;;21349:2:1;45643:231:0::1;::::0;::::1;21331:21:1::0;21388:2;21368:18;;;21361:30;-1:-1:-1;;;21407:18:1;;;21400:48;21465:18;;45643:231:0::1;21147:342:1::0;45643:231:0::1;45885:17;45958:6:::0;;45983:18;::::1;46020:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;46053:17;::::0;;;::::1;::::0;::::1;;:::i;:::-;46089:8;:15;;;46123:8;:20;;;46162:12;46193:4;;45929:283;;;;;;;;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;45929:283:0;;::::1;::::0;;;;;;45905:318;;45929:283:::1;45905:318:::0;;::::1;::::0;46242:23:::1;::::0;;;:12:::1;:23:::0;;;;;;45905:318;;-1:-1:-1;46242:23:0::1;;46234:58;;;::::0;-1:-1:-1;;;46234:58:0;;22653:2:1;46234:58:0::1;::::0;::::1;22635:21:1::0;22692:2;22672:18;;;22665:30;-1:-1:-1;;;22711:18:1;;;22704:52;22773:18;;46234:58:0::1;22451:346:1::0;46234:58:0::1;46329:5;46303:23:::0;;;:12:::1;:23;::::0;;;;;;;:31;;-1:-1:-1;;46303:31:0::1;::::0;;46381:14:::1;::::0;;;;;;::::1;;:::i;:::-;-1:-1:-1::0;;;;;46369:38:0::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46347:62:::0;-1:-1:-1;;;;;;46428:25:0;::::1;46420:71;;;;-1:-1:-1::0;;;46420:71:0::1;;;;;;;:::i;:::-;46573:15;::::0;::::1;;-1:-1:-1::0;;;;;46524:29:0;::::1;;46554:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;46524:45;::::0;-1:-1:-1;;;;;;46524:45:0::1;::::0;;;;;;-1:-1:-1;;;;;2376:32:1;;;46524:45:0::1;::::0;::::1;2358:51:1::0;2331:18;;46524:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;;46502:144;;;::::0;-1:-1:-1;;;46502:144:0;;23406:2:1;46502:144:0::1;::::0;::::1;23388:21:1::0;23445:2;23425:18;;;23418:30;23484:32;23464:18;;;23457:60;23534:18;;46502:144:0::1;23204:354:1::0;46502:144:0::1;46694:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;46678:36:0::1;;46723:4;46730:8;:15;;;46678:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46657:100;;;;:::i;:::-;46780:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;46768:36:0::1;;46819:15;::::0;::::1;::::0;::::1;::::0;46849:17:::1;::::0;::::1;::::0;::::1;;:::i;:::-;46768:109;::::0;-1:-1:-1;;;;;;46768:109:0::1;::::0;;;;;;::::1;::::0;::::1;18019:25:1::0;;;;-1:-1:-1;;;;;18080:32:1;18060:18;;;18053:60;17992:18;;46768:109:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46890:12;46913:19;46950:8;46945:383;;46996:194;::::0;-1:-1:-1;;;46996:194:0;;-1:-1:-1;;;;;47013:15:0::1;46996:41;::::0;::::1;::::0;:194:::1;::::0;47060:12;;47095:11;;47129:15:::1;::::0;::::1;;::::0;47167:4;;;;46996:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;46996:194:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;46975:342:::0;::::1;;47282:4:::0;;-1:-1:-1;47288:3:0;-1:-1:-1;46975:342:0::1;47345:278;47381:6:::0;;47402:18;::::1;47435:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;47464:8;:17;;;;;;;;;;:::i;:::-;47496:8;:15;;;47526:8;:20;;;47561:8;47584:7;47606:6;47345:278;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0;18227:7;:22;-1:-1:-1;;;;;;;;;45348:2283:0:o;47681:242::-;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;18603:3:::1;::::0;-1:-1:-1;;;;;18603:3:0::1;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::1;;;;;;;:::i;:::-;47807:50:::2;::::0;-1:-1:-1;;;47807:50:0;;-1:-1:-1;;;;;47807:27:0;::::2;::::0;::::2;::::0;:50:::2;::::0;47843:4:::2;::::0;47850:6;;47807:50:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;47868:47:0::2;::::0;-1:-1:-1;;;47868:47:0;;::::2;::::0;::::2;18019:25:1::0;;;47904:10:0::2;18060:18:1::0;;;18053:60;-1:-1:-1;;;;;47868:27:0;::::2;::::0;::::2;::::0;17992:18:1;;47868:47:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;17273:1:0;18227:7;:22;-1:-1:-1;47681:242:0:o;21414:206::-;21353:5;;-1:-1:-1;;;;;21353:5:0;21339:10;:19;21331:55;;;;-1:-1:-1;;;21331:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21489:20:0;::::1;21481:57;;;::::0;-1:-1:-1;;;21481:57:0;;26965:2:1;21481:57:0::1;::::0;::::1;26947:21:1::0;27004:2;26984:18;;;26977:30;27043:26;27023:18;;;27016:54;27087:18;;21481:57:0::1;26763:348:1::0;21481:57:0::1;21549:12;:21:::0;;-1:-1:-1;;;;;;21549:21:0::1;-1:-1:-1::0;;;;;21549:21:0;;::::1;::::0;;::::1;::::0;;;21598:5:::1;::::0;21586:26:::1;::::0;21549:21;;21598:5:::1;::::0;21586:26:::1;::::0;-1:-1:-1;;21586:26:0::1;21414:206:::0;:::o;35787:642::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;18603:3:::2;::::0;-1:-1:-1;;;;;18603:3:0::2;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::2;;;;;;;:::i;:::-;35990:14:::3;::::0;35974:64:::3;::::0;-1:-1:-1;;;35974:64:0;;-1:-1:-1;;;;;35990:14:0;;::::3;::::0;35974:46:::3;::::0;:64:::3;::::0;36021:6;;;;36029:8;;35974:64:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;36086:14:0::3;::::0;-1:-1:-1;;;36086:14:0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;36070:36:0::3;;36125:17;::::0;;;::::3;::::0;::::3;;:::i;:::-;36161:8;:15;;;36070:121;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36049:153;;;;:::i;36542:851::-:0;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;18603:3:::2;::::0;-1:-1:-1;;;;;18603:3:0::2;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::2;;;;;;;:::i;:::-;36797:1:::3;36757:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;36745:38:0::3;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36745:54:0::3;::::0;36723:137:::3;;;;-1:-1:-1::0;;;36723:137:0::3;;;;;;;:::i;:::-;36887:14;::::0;36871:64:::3;::::0;-1:-1:-1;;;36871:64:0;;-1:-1:-1;;;;;36887:14:0;;::::3;::::0;36871:46:::3;::::0;:64:::3;::::0;36918:6;;;;36926:8;;36871:64:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;36983:14:0::3;::::0;-1:-1:-1;;;36983:14:0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;36967:36:0::3;;37012:4;37019:8;:15;;;36967:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36946:100;;;;:::i;:::-;37069:14;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;37057:36:0::3;;37108:15;::::0;::::3;::::0;::::3;::::0;37138:17:::3;::::0;::::3;::::0;::::3;;:::i;:::-;37057:109;::::0;-1:-1:-1;;;;;;37057:109:0::3;::::0;;;;;;::::3;::::0;::::3;18019:25:1::0;;;;-1:-1:-1;;;;;18080:32:1;18060:18;;;18053:60;17992:18;;37057:109:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37292:17:0::3;::::0;;;::::3;::::0;::::3;;:::i;27899:165::-:0;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;18603:3:::1;::::0;-1:-1:-1;;;;;18603:3:0::1;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::1;;;;;;;:::i;:::-;28024:14:::2;:32:::0;;-1:-1:-1;;;;;;28024:32:0::2;-1:-1:-1::0;;;;;28024:32:0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;18227:7:0;:22;27899:165::o;19300:452::-;19376:10;;-1:-1:-1;;;;;19376:10:0;19362;:24;;:96;;-1:-1:-1;19418:3:0;;-1:-1:-1;;;;;19418:3:0;19404:10;:17;:53;;;;-1:-1:-1;19433:10:0;;-1:-1:-1;;;;;19433:10:0;4527:19;:23;;19425:32;19340:167;;;;-1:-1:-1;;;19340:167:0;;27318:2:1;19340:167:0;;;27300:21:1;27357:2;27337:18;;;27330:30;-1:-1:-1;;;27376:18:1;;;27369:51;27437:18;;19340:167:0;27116:345:1;19340:167:0;19537:1;19526:8;;:12;:43;;;;;19561:8;;19542:15;:27;;19526:43;19518:81;;;;-1:-1:-1;;;19518:81:0;;27668:2:1;19518:81:0;;;27650:21:1;27707:2;27687:18;;;27680:30;27746:27;27726:18;;;27719:55;27791:18;;19518:81:0;27466:349:1;19518:81:0;19632:10;;;19627:3;19615:45;;19644:15;1469:25:1;;-1:-1:-1;;;;;19632:10:0;;;;19627:3;;;;19615:45;;1457:2:1;1442:18;19615:45:0;;;;;;;19677:10;;;;19671:16;;-1:-1:-1;;;;;;19671:16:0;;;-1:-1:-1;;;;;19677:10:0;;19671:16;;;19698:23;;;;;;19732:8;:12;19300:452::o;29106:576::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;29343:14:::2;::::0;29327:199:::2;::::0;-1:-1:-1;;;29327:199:0;;29307:17:::2;::::0;-1:-1:-1;;;;;29343:14:0::2;::::0;29327:47:::2;::::0;:199:::2;::::0;29389:5;;29409:10:::2;::::0;29434:2;;;;29451:6;;29472:9;;29327:199:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29544:47;::::0;-1:-1:-1;;;29544:47:0;;29307:219;;-1:-1:-1;;;;;;29544:27:0;::::2;::::0;::::2;::::0;:47:::2;::::0;29572:10:::2;::::0;29584:6;;29544:47:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29537:55;;;;:::i;:::-;29640:10;-1:-1:-1::0;;;;;29608:66:0::2;29633:5;-1:-1:-1::0;;;;;29608:66:0::2;29622:9;29608:66;29652:2;;29656:6;29664:9;29608:66;;;;;;;;;:::i;41818:3262::-:0;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;25482:29:::1;20494:4:::0;20518:18;;;:12;:18;;;;;;20128:13:::1;:40;;;;-1:-1:-1::0;19975:4:0::1;20518:18:::0;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23:::1;20128:40;20106:113;;;;-1:-1:-1::0;;;20106:113:0::1;;;;;;;:::i;:::-;17317:1:::2;17915:7;;:19:::0;17907:63:::2;;;;-1:-1:-1::0;;;17907:63:0::2;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;18603:3:::3;::::0;-1:-1:-1;;;;;18603:3:0::3;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::3;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42171:30:0;::::4;;::::0;;;:16:::4;:30;::::0;;;;:40;::::4;;42149:114;;;::::0;-1:-1:-1;;;42149:114:0;;28022:2:1;42149:114:0::4;::::0;::::4;28004:21:1::0;28061:2;28041:18;;;28034:30;-1:-1:-1;;;28080:18:1;;;28073:54;28144:18;;42149:114:0::4;27820:348:1::0;42149:114:0::4;42290:14;::::0;42274:64:::4;::::0;-1:-1:-1;;;42274:64:0;;-1:-1:-1;;;;;42290:14:0;;::::4;::::0;42274:46:::4;::::0;:64:::4;::::0;42321:6;;;;42329:8;;42274:64:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;42351:20;42457:19:::0;42491:8:::4;:14;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42479:38:0::4;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42457:62:::0;-1:-1:-1;;;;;;42560:25:0;::::4;42534:120;;;;-1:-1:-1::0;;;42534:120:0::4;;;;;;;:::i;:::-;42742:15;::::0;::::4;;-1:-1:-1::0;;;;;42693:29:0;::::4;;42723:14;::::0;;;::::4;::::0;::::4;;:::i;:::-;42693:45;::::0;-1:-1:-1;;;;;;42693:45:0::4;::::0;;;;;;-1:-1:-1;;;;;2376:32:1;;;42693:45:0::4;::::0;::::4;2358:51:1::0;2331:18;;42693:45:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;42671:1748;;42807:11:::0;-1:-1:-1;42807:11:0;42882:14:::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;42866:36:0::4;;42937:4;42969:8;:15;;;42866:141;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42837:189;;;;:::i;:::-;43057:14;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;43045:36:0::4;;43104:15;::::0;::::4;::::0;::::4;::::0;43142:17:::4;::::0;::::4;::::0;::::4;;:::i;:::-;43045:133;::::0;-1:-1:-1;;;;;;43045:133:0::4;::::0;;;;;;::::4;::::0;::::4;18019:25:1::0;;;;-1:-1:-1;;;;;18080:32:1;18060:18;;;18053:60;17992:18;;43045:133:0::4;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42671:1748;;;-1:-1:-1::0;;;;;43204:30:0;::::4;;::::0;;;:16:::4;:30;::::0;;;;:45;::::4;::::0;::::4;;;43200:1219;;;43285:14;::::0;;;::::4;::::0;::::4;;:::i;:::-;43270:29:::0;-1:-1:-1;43363:14:0::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;43347:36:0::4;;43410:17;::::0;;;::::4;::::0;::::4;;:::i;:::-;43454:8;:15;;;43347:145;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43318:193;;;;:::i;:::-;43200:1219;;;43552:17;43641:6:::0;;43674:18;::::4;43719:14;::::0;;;::::4;::::0;::::4;;:::i;:::-;43760:17;::::0;;;::::4;::::0;::::4;;:::i;:::-;43804:8;:15;;;43846:8;:20;;;43893:12;43932:4;;43604:355;;;;;;;;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;43604:355:0;;::::4;::::0;;;;;;43572:406;;43604:355:::4;43572:406:::0;;::::4;::::0;43997:23:::4;::::0;;;:12:::4;:23:::0;;;;;:30;;-1:-1:-1;;43997:30:0::4;44023:4;43997:30;::::0;;43572:406;-1:-1:-1;44051:327:0::4;::::0;44092:6;;;;44121:18;::::4;::::0;44162:14:::4;::::0;;;;;;::::4;;:::i;:::-;44199:8;:17;;;;;;;;;;:::i;:::-;44239:8;:15;;;44277:8;:20;;;44320:12;44355:4;;44051:327;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;44397:7;;;;;43200:1219;42442:1988;44442:12;44465:19;44529:15;-1:-1:-1::0;;;;;44512:41:0::4;;44572:12;44603;44634:8;:15;;;44668:4;;44512:175;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;44512:175:0::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;;;44495:307:::0;::::4;;44771:4:::0;;-1:-1:-1;44777:3:0;-1:-1:-1;44495:307:0::4;44936:17;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;44819:253:0::4;44907:14;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;44819:253:0::4;44874:8;:18;;;44819:253;44853:6;;44968:8;:15;;;44998:8;:20;;;45033:7;45055:6;44819:253;;;;;;;;;;;:::i;:::-;;;;;;;;42138:2942;;;18635:1;-1:-1:-1::0;;17273:1:0::2;18227:7;:22:::0;-1:-1:-1;;;;;;41818:3262:0:o;28765:245::-;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;18603:3:::1;::::0;-1:-1:-1;;;;;18603:3:0::1;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::1;;;;;;;:::i;:::-;28901:9:::2;28896:107;28916:18:::0;;::::2;28896:107;;;28963:16;:28;28980:7;;28988:1;28980:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28963:28:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;28963:28:0;28956:35;;-1:-1:-1;;28956:35:0;;;28936:3;::::2;::::0;::::2;:::i;:::-;;;;28896:107;;32363:877:::0;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;;;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;32655:15;32647:43:::2;;;;-1:-1:-1::0;;;32647:43:0::2;;;;;;;:::i;:::-;32701:18;32722:36;32744:5;32751:6;32722:21;:36::i;:::-;32701:57;;32769:17;32805:14;;;;;;;;;-1:-1:-1::0;;;;;32805:14:0::2;-1:-1:-1::0;;;;;32789:47:0::2;;32851:5;32871:10;32896:2;;32913:10;32938:9;32962:12;;32989:4;;32789:215;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32769:235;;33099:10;-1:-1:-1::0;;;;;33020:212:0::2;33079:5;-1:-1:-1::0;;;;;33020:212:0::2;33055:9;33020:212;33124:2;;33141:10;33166:9;33190:12;;33217:4;;33020:212;;;;;;;;;;;;;:::i;28292:465::-:0;17317:1;17915:7;;:19;17907:63;;;;-1:-1:-1;;;17907:63:0;;;;;;;:::i;:::-;17317:1;18048:7;:18;18603:3:::1;::::0;-1:-1:-1;;;;;18603:3:0::1;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::1;;;;;;;:::i;:::-;28467:7:::0;28500:36;;::::2;28492:64;;;::::0;-1:-1:-1;;;28492:64:0;;29285:2:1;28492:64:0::2;::::0;::::2;29267:21:1::0;29324:2;29304:18;;;29297:30;-1:-1:-1;;;29343:18:1;;;29336:45;29398:18;;28492:64:0::2;29083:339:1::0;28492:64:0::2;28572:9;28567:183;28591:6;28587:1;:10;28567:183;;;28650:88;;;;;;;;28678:4;28650:88;;;;;;28701:19;;28721:1;28701:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28650:88;;::::0;;28619:16:::2;:28;28636:7:::0;;28644:1;28636:10;;::::2;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28619:28:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;-1:-1:-1;28619:28:0;:119;;;;;;;::::2;::::0;::::2;;;;-1:-1:-1::0;;28619:119:0;::::2;;::::0;;;;-1:-1:-1;;28619:119:0;;;;;;;::::2;::::0;;28599:3;::::2;::::0;::::2;:::i;:::-;;;;28567:183;;;-1:-1:-1::0;;17273:1:0;18227:7;:22;-1:-1:-1;;;;28292:465:0:o;34863:844::-;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;;;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;17317:1:::1;17915:7;;:19:::0;17907:63:::1;;;;-1:-1:-1::0;;;17907:63:0::1;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;35134:15;35126:43:::2;;;;-1:-1:-1::0;;;35126:43:0::2;;;;;;;:::i;:::-;35180:18;35201:24;35219:5;35201:17;:24::i;:::-;35180:45;;35236:17;35272:14;;;;;;;;;-1:-1:-1::0;;;;;35272:14:0::2;-1:-1:-1::0;;;;;35256:47:0::2;;35318:5;35338:10;35363:2;;35380:10;35405:9;35429:12;;35456:4;;35256:215;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35236:235;;35566:10;-1:-1:-1::0;;;;;35487:212:0::2;35546:5;-1:-1:-1::0;;;;;35487:212:0::2;35522:9;35487:212;35591:2;;35608:10;35633:9;35657:12;;35684:4;;35487:212;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0::1;18227:7;:22:::0;-1:-1:-1;;;;;;;;;34863:844:0:o;22100:79::-;21353:5;;-1:-1:-1;;;;;21353:5:0;21339:10;:19;21331:55;;;;-1:-1:-1;;;21331:55:0;;;;;;;:::i;:::-;22159:12:::1;22166:4;22159:6;:12::i;40376:1329::-:0;-1:-1:-1;;;;;;;;;;;20494:4:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;25482:29:::1;20494:4:::0;20518:18;;;:12;:18;;;;;;20128:13:::1;:40;;;;-1:-1:-1::0;19975:4:0::1;20518:18:::0;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23:::1;20128:40;20106:113;;;;-1:-1:-1::0;;;20106:113:0::1;;;;;;;:::i;:::-;17317:1:::2;17915:7;;:19:::0;17907:63:::2;;;;-1:-1:-1::0;;;17907:63:0::2;;;;;;;:::i;:::-;17317:1;18048:7;:18:::0;18603:3:::3;::::0;-1:-1:-1;;;;;18603:3:0::3;18589:10;:17;18581:43;;;;-1:-1:-1::0;;;18581:43:0::3;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40719:30:0;::::4;;::::0;;;:16:::4;:30;::::0;;;;:40;::::4;;40697:114;;;::::0;-1:-1:-1;;;40697:114:0;;28022:2:1;40697:114:0::4;::::0;::::4;28004:21:1::0;28061:2;28041:18;;;28034:30;-1:-1:-1;;;28080:18:1;;;28073:54;28144:18;;40697:114:0::4;27820:348:1::0;40697:114:0::4;40838:14;::::0;40822:64:::4;::::0;-1:-1:-1;;;40822:64:0;;-1:-1:-1;;;;;40838:14:0;;::::4;::::0;40822:46:::4;::::0;:64:::4;::::0;40869:6;;;;40877:8;;40822:64:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;-1:-1:-1::0;40936:14:0::4;::::0;-1:-1:-1;;;40936:14:0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;40920:36:0::4;;40975:17;::::0;;;::::4;::::0;::::4;;:::i;:::-;41011:8;:15;;;40920:121;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40899:153;;;;:::i;:::-;41065:12;41088:19;-1:-1:-1::0;;;;;41152:15:0::4;41135:41;;41195:12:::0;41226:14:::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;41259:8;:15;;;41293:4;;41135:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;41135:177:0::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;;;41118:309:::0;::::4;;41396:4:::0;;-1:-1:-1;41402:3:0;-1:-1:-1;41118:309:0::4;41561:17;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;41444:253:0::4;41532:14;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;41444:253:0::4;41499:8;:18;;;41444:253;41478:6;;41593:8;:15;;;41623:8;:20;;;41658:7;41680:6;41444:253;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;17273:1:0::2;18227:7;:22:::0;-1:-1:-1;;;;;;;;40376:1329:0:o;30754:674::-;-1:-1:-1;;;;;;;;;;;30896:7:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;30896:7;;25321:32;20518:18;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;30921:19:::1;30955:5;-1:-1:-1::0;;;;;30943:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30921:53:::0;-1:-1:-1;;;;;;30993:25:0;::::1;30985:71;;;;-1:-1:-1::0;;;30985:71:0::1;;;;;;;:::i;:::-;31089:36;::::0;-1:-1:-1;;;31089:36:0;;-1:-1:-1;;;;;2376:32:1;;;31089:36:0::1;::::0;::::1;2358:51:1::0;31067:19:0::1;::::0;31089:29;;::::1;::::0;::::1;::::0;2331:18:1;;31089:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31067:58:::0;-1:-1:-1;31136:63:0::1;-1:-1:-1::0;;;;;31136:36:0;::::1;31173:10;31185:5:::0;31192:6;31136:36:::1;:63::i;:::-;31232:36;::::0;-1:-1:-1;;;31232:36:0;;-1:-1:-1;;;;;2376:32:1;;;31232:36:0::1;::::0;::::1;2358:51:1::0;31210:19:0::1;::::0;31232:29;;::::1;::::0;::::1;::::0;2331:18:1;;31232:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31210:58;;31316:11;31301;:26;;:65;;;;-1:-1:-1::0;31346:20:0::1;31360:6:::0;31346:11;:20:::1;:::i;:::-;31331:11;:35;;31301:65;31279:98;;;::::0;::::1;;31395:25;31409:11:::0;31395;:25:::1;:::i;:::-;31388:32:::0;30754:674;-1:-1:-1;;;;;;;30754:674:0:o;20699:141::-;20494:4;20518:18;;;:12;:18;;;;;;20759:4;;20518:18;;20314:38;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20330:22;20292:115;;;;-1:-1:-1;;;20292:115:0;;30005:2:1;20292:115:0;;;29987:21:1;30044:2;30024:18;;;30017:30;30083:29;30063:18;;;30056:57;30130:18;;20292:115:0;29803:351:1;20292:115:0;20797:5:::1;20776:18:::0;;;:12:::1;:18;::::0;;;;;;:26;;-1:-1:-1;;20776:26:0::1;::::0;;20818:14;::::1;::::0;::::1;::::0;20789:4;1469:25:1;;1457:2;1442:18;;1323:177;20818:14:0::1;;;;;;;;20699:141:::0;;:::o;33248:763::-;-1:-1:-1;;;;;;;;;;;33370:7:0;20518:18;;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;33370:7;;25321:32;20518:18;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;33403:7:::1;-1:-1:-1::0;;;;;33403:21:0::1;33395:64;;;::::0;-1:-1:-1;;;33395:64:0;;15885:2:1;33395:64:0::1;::::0;::::1;15867:21:1::0;15924:2;15904:18;;;15897:30;15963:32;15943:18;;;15936:60;16013:18;;33395:64:0::1;15683:354:1::0;33395:64:0::1;33527:7;-1:-1:-1::0;;;;;33492:42:0::1;33504:5;-1:-1:-1::0;;;;;33492:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33492:42:0::1;;33470:135;;;;-1:-1:-1::0;;;33470:135:0::1;;;;;;;:::i;:::-;33638:32;::::0;-1:-1:-1;;;33638:32:0;;-1:-1:-1;;;;;2376:32:1;;;33638::0::1;::::0;::::1;2358:51:1::0;33616:19:0::1;::::0;33645:7:::1;33638:25:::0;;::::1;::::0;::::1;::::0;2331:18:1;;33638:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33616:54;;33690:7;-1:-1:-1::0;;;;;33681:25:0::1;;33714:9;33681:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;33737:46:0::1;::::0;-1:-1:-1;;;;;;;33744:7:0::1;33737:28;::::0;-1:-1:-1;33766:5:0;;-1:-1:-1;33773:9:0::1;33737:28;:46::i;:::-;33816:32;::::0;-1:-1:-1;;;33816:32:0;;-1:-1:-1;;;;;2376:32:1;;;33816::0::1;::::0;::::1;2358:51:1::0;33794:19:0::1;::::0;33823:7:::1;33816:25:::0;;::::1;::::0;::::1;::::0;2331:18:1;;33816:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33794:54;;33896:11;33881;:26;;:68;;;;-1:-1:-1::0;33926:23:0::1;33940:9;33926:11:::0;:23:::1;:::i;:::-;33911:11;:38;;33881:68;33859:101;;;::::0;::::1;;33978:25;33992:11:::0;33978;:25:::1;:::i;:::-;33971:32:::0;33248:763;-1:-1:-1;;;;;33248:763:0:o;5493:317::-;5608:6;5583:21;:31;;5575:73;;;;-1:-1:-1;;;5575:73:0;;30361:2:1;5575:73:0;;;30343:21:1;30400:2;30380:18;;;30373:30;30439:31;30419:18;;;30412:59;30488:18;;5575:73:0;30159:353:1;5575:73:0;5662:12;5680:9;-1:-1:-1;;;;;5680:14:0;5702:6;5680:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:52;;;5732:7;5724:78;;;;-1:-1:-1;;;5724:78:0;;30929:2:1;5724:78:0;;;30911:21:1;30968:2;30948:18;;;30941:30;31007:34;30987:18;;;30980:62;31078:28;31058:18;;;31051:56;31124:19;;5724:78:0;30727:422:1;5724:78:0;5564:246;5493:317;;:::o;20552:139::-;20494:4;20518:18;;;:12;:18;;;;;;20613:4;;20518:18;;20128:13;:40;;;;-1:-1:-1;19975:4:0;20518:18;;:12;:18;;-1:-1:-1;;;;;;;;;;;20518:18:0;;;20145:23;20128:40;20106:113;;;;-1:-1:-1;;;20106:113:0;;;;;;;:::i;:::-;20630:18:::1;::::0;;;:12:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;20630:25:0::1;20651:4;20630:25;::::0;;20671:12;::::1;::::0;::::1;::::0;20643:4;1469:25:1;;1457:2;1442:18;;1323:177;12422:248:0;12593:68;;-1:-1:-1;;;;;31412:15:1;;;12593:68:0;;;31394:34:1;31464:15;;31444:18;;;31437:43;31496:18;;;31489:34;;;12566:96:0;;12586:5;;-1:-1:-1;;;12616:27:0;31329:18:1;;12593:68:0;;;;-1:-1:-1;;12593:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12593:68:0;-1:-1:-1;;;;;;12593:68:0;;;;;;;;;;12566:19;:96::i;:::-;12422:248;;;;:::o;12203:211::-;12320:86;12340:5;12370:23;;;12395:2;12399:5;12347:58;;;;;;;;;:::i;14776:716::-;15200:23;15226:69;15254:4;15226:69;;;;;;;;;;;;;;;;;15234:5;-1:-1:-1;;;;;15226:27:0;;;:69;;;;;:::i;:::-;15310:17;;15200:95;;-1:-1:-1;15310:21:0;15306:179;;15407:10;15396:30;;;;;;;;;;;;:::i;:::-;15388:85;;;;-1:-1:-1;;;15388:85:0;;31736:2:1;15388:85:0;;;31718:21:1;31775:2;31755:18;;;31748:30;31814:34;31794:18;;;31787:62;-1:-1:-1;;;31865:18:1;;;31858:40;31915:19;;15388:85:0;31534:406:1;6977:229:0;7114:12;7146:52;7168:6;7176:4;7182:1;7185:12;7146:21;:52::i;:::-;7139:59;;6977:229;;;;;;:::o;8097:510::-;8267:12;8325:5;8300:21;:30;;8292:81;;;;-1:-1:-1;;;8292:81:0;;32147:2:1;8292:81:0;;;32129:21:1;32186:2;32166:18;;;32159:30;32225:34;32205:18;;;32198:62;-1:-1:-1;;;32276:18:1;;;32269:36;32322:19;;8292:81:0;31945:402:1;8292:81:0;-1:-1:-1;;;;;4527:19:0;;;8384:60;;;;-1:-1:-1;;;8384:60:0;;32554:2:1;8384:60:0;;;32536:21:1;32593:2;32573:18;;;32566:30;32632:31;32612:18;;;32605:59;32681:18;;8384:60:0;32352:353:1;8384:60:0;8458:12;8472:23;8499:6;-1:-1:-1;;;;;8499:11:0;8518:5;8525:4;8499:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8457:73;;;;8548:51;8565:7;8574:10;8586:12;10933;10962:7;10958:530;;;-1:-1:-1;10993:10:0;10986:17;;10958:530;11107:17;;:21;11103:374;;11305:10;11299:17;11366:15;11353:10;11349:2;11345:19;11338:44;11103:374;11448:12;11441:20;;-1:-1:-1;;;11441:20:0;;;;;;;;:::i;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;282:348;334:8;344:6;398:3;391:4;383:6;379:17;375:27;365:55;;416:1;413;406:12;365:55;-1:-1:-1;439:20:1;;482:18;471:30;;468:50;;;514:1;511;504:12;468:50;551:4;543:6;539:17;527:29;;603:3;596:4;587:6;579;575:19;571:30;568:39;565:59;;;620:1;617;610:12;565:59;282:348;;;;;:::o;635:683::-;733:6;741;749;757;765;818:3;806:9;797:7;793:23;789:33;786:53;;;835:1;832;825:12;786:53;874:9;861:23;893:31;918:5;893:31;:::i;:::-;943:5;-1:-1:-1;999:2:1;984:18;;971:32;1026:18;1015:30;;1012:50;;;1058:1;1055;1048:12;1012:50;1097:59;1148:7;1139:6;1128:9;1124:22;1097:59;:::i;:::-;635:683;;1175:8;;-1:-1:-1;1071:85:1;;1257:2;1242:18;;1229:32;;1308:2;1293:18;;;1280:32;;-1:-1:-1;635:683:1;-1:-1:-1;;;;635:683:1:o;1687:247::-;1746:6;1799:2;1787:9;1778:7;1774:23;1770:32;1767:52;;;1815:1;1812;1805:12;1767:52;1854:9;1841:23;1873:31;1898:5;1873:31;:::i;2420:180::-;2479:6;2532:2;2520:9;2511:7;2507:23;2503:32;2500:52;;;2548:1;2545;2538:12;2500:52;-1:-1:-1;2571:23:1;;2420:180;-1:-1:-1;2420:180:1:o;2605:388::-;2673:6;2681;2734:2;2722:9;2713:7;2709:23;2705:32;2702:52;;;2750:1;2747;2740:12;2702:52;2789:9;2776:23;2808:31;2833:5;2808:31;:::i;:::-;2858:5;-1:-1:-1;2915:2:1;2900:18;;2887:32;2928:33;2887:32;2928:33;:::i;:::-;2980:7;2970:17;;;2605:388;;;;;:::o;3190:614::-;3279:6;3287;3295;3303;3356:2;3344:9;3335:7;3331:23;3327:32;3324:52;;;3372:1;3369;3362:12;3324:52;3411:9;3398:23;3430:31;3455:5;3430:31;:::i;:::-;3480:5;-1:-1:-1;3536:2:1;3521:18;;3508:32;3563:18;3552:30;;3549:50;;;3595:1;3592;3585:12;3549:50;3634:59;3685:7;3676:6;3665:9;3661:22;3634:59;:::i;:::-;3190:614;;3712:8;;-1:-1:-1;3608:85:1;;3794:2;3779:18;3766:32;;3190:614;-1:-1:-1;;;;3190:614:1:o;3809:157::-;3870:5;3915:3;3906:6;3901:3;3897:16;3893:26;3890:46;;;3932:1;3929;3922:12;3890:46;-1:-1:-1;3954:6:1;3809:157;-1:-1:-1;3809:157:1:o;3971:540::-;4079:6;4087;4095;4148:3;4136:9;4127:7;4123:23;4119:33;4116:53;;;4165:1;4162;4155:12;4116:53;4205:9;4192:23;4238:18;4230:6;4227:30;4224:50;;;4270:1;4267;4260:12;4224:50;4309:59;4360:7;4351:6;4340:9;4336:22;4309:59;:::i;:::-;4387:8;;-1:-1:-1;4283:85:1;-1:-1:-1;4441:64:1;;-1:-1:-1;4497:7:1;4492:2;4477:18;;4441:64;:::i;:::-;4431:74;;3971:540;;;;;:::o;4516:1283::-;4655:6;4663;4671;4679;4687;4695;4703;4711;4719;4772:3;4760:9;4751:7;4747:23;4743:33;4740:53;;;4789:1;4786;4779:12;4740:53;4828:9;4815:23;4847:31;4872:5;4847:31;:::i;:::-;4897:5;-1:-1:-1;4953:2:1;4938:18;;4925:32;4976:18;5006:14;;;5003:34;;;5033:1;5030;5023:12;5003:34;5072:59;5123:7;5114:6;5103:9;5099:22;5072:59;:::i;:::-;5150:8;;-1:-1:-1;5046:85:1;-1:-1:-1;5232:2:1;5217:18;;5204:32;;-1:-1:-1;5283:2:1;5268:18;;5255:32;;-1:-1:-1;5340:3:1;5325:19;;5312:33;;-1:-1:-1;5357:16:1;;;5354:36;;;5386:1;5383;5376:12;5354:36;5425:61;5478:7;5467:8;5456:9;5452:24;5425:61;:::i;:::-;5505:8;;-1:-1:-1;5399:87:1;-1:-1:-1;5593:3:1;5578:19;;5565:33;;-1:-1:-1;5610:16:1;;;5607:36;;;5639:1;5636;5629:12;5607:36;;5678:61;5731:7;5720:8;5709:9;5705:24;5678:61;:::i;:::-;5652:87;;5758:8;5748:18;;;5785:8;5775:18;;;4516:1283;;;;;;;;;;;:::o;5804:118::-;5890:5;5883:13;5876:21;5869:5;5866:32;5856:60;;5912:1;5909;5902:12;5927:1122;6070:6;6078;6086;6094;6102;6110;6118;6171:3;6159:9;6150:7;6146:23;6142:33;6139:53;;;6188:1;6185;6178:12;6139:53;6228:9;6215:23;6257:18;6298:2;6290:6;6287:14;6284:34;;;6314:1;6311;6304:12;6284:34;6353:59;6404:7;6395:6;6384:9;6380:22;6353:59;:::i;:::-;6431:8;;-1:-1:-1;6327:85:1;-1:-1:-1;6327:85:1;;-1:-1:-1;6485:64:1;6541:7;6536:2;6521:18;;6485:64;:::i;:::-;6475:74;;6599:3;6588:9;6584:19;6571:33;6558:46;;6613:31;6638:5;6613:31;:::i;:::-;6663:5;;-1:-1:-1;6721:3:1;6706:19;;6693:33;;6738:16;;;6735:36;;;6767:1;6764;6757:12;6735:36;;6806:61;6859:7;6848:8;6837:9;6833:24;6806:61;:::i;:::-;6886:8;;-1:-1:-1;6780:87:1;-1:-1:-1;;6973:3:1;6958:19;;6945:33;6987:30;6945:33;6987:30;:::i;:::-;7036:7;7026:17;;;5927:1122;;;;;;;;;;:::o;7054:315::-;7122:6;7130;7183:2;7171:9;7162:7;7158:23;7154:32;7151:52;;;7199:1;7196;7189:12;7151:52;7238:9;7225:23;7257:31;7282:5;7257:31;:::i;:::-;7307:5;7359:2;7344:18;;;;7331:32;;-1:-1:-1;;;7054:315:1:o;7374:986::-;7511:6;7519;7527;7535;7543;7551;7604:3;7592:9;7583:7;7579:23;7575:33;7572:53;;;7621:1;7618;7611:12;7572:53;7661:9;7648:23;7690:18;7731:2;7723:6;7720:14;7717:34;;;7747:1;7744;7737:12;7717:34;7786:59;7837:7;7828:6;7817:9;7813:22;7786:59;:::i;:::-;7864:8;;-1:-1:-1;7760:85:1;-1:-1:-1;7760:85:1;;-1:-1:-1;7918:64:1;7974:7;7969:2;7954:18;;7918:64;:::i;:::-;7908:74;;8032:3;8021:9;8017:19;8004:33;7991:46;;8046:31;8071:5;8046:31;:::i;:::-;8096:5;;-1:-1:-1;8154:3:1;8139:19;;8126:33;;8171:16;;;8168:36;;;8200:1;8197;8190:12;8168:36;;8239:61;8292:7;8281:8;8270:9;8266:24;8239:61;:::i;:::-;7374:986;;;;-1:-1:-1;7374:986:1;;-1:-1:-1;7374:986:1;;8319:8;;7374:986;-1:-1:-1;;;7374:986:1:o;8365:367::-;8428:8;8438:6;8492:3;8485:4;8477:6;8473:17;8469:27;8459:55;;8510:1;8507;8500:12;8459:55;-1:-1:-1;8533:20:1;;8576:18;8565:30;;8562:50;;;8608:1;8605;8598:12;8562:50;8645:4;8637:6;8633:17;8621:29;;8705:3;8698:4;8688:6;8685:1;8681:14;8673:6;8669:27;8665:38;8662:47;8659:67;;;8722:1;8719;8712:12;8737:437;8823:6;8831;8884:2;8872:9;8863:7;8859:23;8855:32;8852:52;;;8900:1;8897;8890:12;8852:52;8940:9;8927:23;8973:18;8965:6;8962:30;8959:50;;;9005:1;9002;8995:12;8959:50;9044:70;9106:7;9097:6;9086:9;9082:22;9044:70;:::i;:::-;9133:8;;9018:96;;-1:-1:-1;8737:437:1;-1:-1:-1;;;;8737:437:1:o;9179:770::-;9298:6;9306;9314;9322;9375:2;9363:9;9354:7;9350:23;9346:32;9343:52;;;9391:1;9388;9381:12;9343:52;9431:9;9418:23;9460:18;9501:2;9493:6;9490:14;9487:34;;;9517:1;9514;9507:12;9487:34;9556:70;9618:7;9609:6;9598:9;9594:22;9556:70;:::i;:::-;9645:8;;-1:-1:-1;9530:96:1;-1:-1:-1;9733:2:1;9718:18;;9705:32;;-1:-1:-1;9749:16:1;;;9746:36;;;9778:1;9775;9768:12;9746:36;;9817:72;9881:7;9870:8;9859:9;9855:24;9817:72;:::i;:::-;9179:770;;;;-1:-1:-1;9908:8:1;-1:-1:-1;;;;9179:770:1:o;9954:1214::-;10084:6;10092;10100;10108;10116;10124;10132;10140;10193:3;10181:9;10172:7;10168:23;10164:33;10161:53;;;10210:1;10207;10200:12;10161:53;10249:9;10236:23;10268:31;10293:5;10268:31;:::i;:::-;10318:5;-1:-1:-1;10374:2:1;10359:18;;10346:32;10397:18;10427:14;;;10424:34;;;10454:1;10451;10444:12;10424:34;10493:59;10544:7;10535:6;10524:9;10520:22;10493:59;:::i;:::-;10571:8;;-1:-1:-1;10467:85:1;-1:-1:-1;10653:2:1;10638:18;;10625:32;;-1:-1:-1;10710:2:1;10695:18;;10682:32;;-1:-1:-1;10726:16:1;;;10723:36;;;10755:1;10752;10745:12;10723:36;10794:61;10847:7;10836:8;10825:9;10821:24;10794:61;:::i;:::-;10874:8;;-1:-1:-1;10768:87:1;-1:-1:-1;10962:3:1;10947:19;;10934:33;;-1:-1:-1;10979:16:1;;;10976:36;;;11008:1;11005;10998:12;10976:36;;11047:61;11100:7;11089:8;11078:9;11074:24;11047:61;:::i;:::-;9954:1214;;;;-1:-1:-1;9954:1214:1;;-1:-1:-1;9954:1214:1;;;;;;11127:8;-1:-1:-1;;;9954:1214:1:o;11173:355::-;11375:2;11357:21;;;11414:2;11394:18;;;11387:30;11453:33;11448:2;11433:18;;11426:61;11519:2;11504:18;;11173:355::o;11533:267::-;11622:6;11617:3;11610:19;11674:6;11667:5;11660:4;11655:3;11651:14;11638:43;-1:-1:-1;11726:1:1;11701:16;;;11719:4;11697:27;;;11690:38;;;;11782:2;11761:15;;;-1:-1:-1;;11757:29:1;11748:39;;;11744:50;;11533:267::o;11805:1020::-;-1:-1:-1;;;;;12315:15:1;;;12297:34;;12367:15;;12362:2;12347:18;;12340:43;12419:3;12414:2;12399:18;;12392:31;;;12240:4;;12446:63;;12489:19;;12481:6;12473;12446:63;:::i;:::-;12545:6;12540:2;12529:9;12525:18;12518:34;12589:6;12583:3;12572:9;12568:19;12561:35;12627:9;12619:6;12615:22;12674:2;12668:3;12657:9;12653:19;12646:31;12701:1;12693:6;12686:17;12748:2;12744;12740:11;12734:3;12723:9;12719:19;12712:40;;12785:1;12780:2;12772:6;12768:15;12761:26;12816:2;12808:6;12804:15;12796:23;;;11805:1020;;;;;;;;;:::o;12830:184::-;12900:6;12953:2;12941:9;12932:7;12928:23;12924:32;12921:52;;;12969:1;12966;12959:12;12921:52;-1:-1:-1;12992:16:1;;12830:184;-1:-1:-1;12830:184:1:o;13019:389::-;13234:2;13223:9;13216:21;13197:4;13254:62;13312:2;13301:9;13297:18;13289:6;13281;13254:62;:::i;:::-;13347:2;13332:18;;13325:34;;;;-1:-1:-1;13390:2:1;13375:18;13368:34;13246:70;13019:389;-1:-1:-1;;13019:389:1:o;13413:347::-;13615:2;13597:21;;;13654:2;13634:18;;;13627:30;13693:25;13688:2;13673:18;;13666:53;13751:2;13736:18;;13413:347::o;13765:337::-;13967:2;13949:21;;;14006:2;13986:18;;;13979:30;-1:-1:-1;;;14040:2:1;14025:18;;14018:43;14093:2;14078:18;;13765:337::o;14107:245::-;14174:6;14227:2;14215:9;14206:7;14202:23;14198:32;14195:52;;;14243:1;14240;14233:12;14195:52;14275:9;14269:16;14294:28;14316:5;14294:28;:::i;15066:127::-;15127:10;15122:3;15118:20;15115:1;15108:31;15158:4;15155:1;15148:15;15182:4;15179:1;15172:15;15198:128;15238:3;15269:1;15265:6;15262:1;15259:13;15256:39;;;15275:18;;:::i;:::-;-1:-1:-1;15311:9:1;;15198:128::o;15331:347::-;15533:2;15515:21;;;15572:2;15552:18;;;15545:30;15611:25;15606:2;15591:18;;15584:53;15669:2;15654:18;;15331:347::o;16042:251::-;16112:6;16165:2;16153:9;16144:7;16140:23;16136:32;16133:52;;;16181:1;16178;16171:12;16133:52;16213:9;16207:16;16232:31;16257:5;16232:31;:::i;16298:407::-;16500:2;16482:21;;;16539:2;16519:18;;;16512:30;16578:34;16573:2;16558:18;;16551:62;-1:-1:-1;;;16644:2:1;16629:18;;16622:41;16695:3;16680:19;;16298:407::o;16710:851::-;16951:3;16940:9;16933:22;16914:4;16972:63;17030:3;17019:9;17015:19;17007:6;16999;16972:63;:::i;:::-;16964:71;;17084:6;17071:20;17066:2;17055:9;17051:18;17044:48;17139:2;17131:6;17127:15;17114:29;17152:31;17177:5;17152:31;:::i;:::-;-1:-1:-1;;;;;17257:14:1;;;17252:2;17237:18;;;17230:42;;;;17309:15;;17296:29;;17334:33;17296:29;17334:33;:::i;:::-;17416:2;17407:7;17403:16;17398:2;17387:9;17383:18;17376:44;;;17482:2;17474:6;17470:15;17457:29;17451:3;17440:9;17436:19;17429:58;17549:3;17541:6;17537:16;17524:30;17518:3;17507:9;17503:19;17496:59;16710:851;;;;;;:::o;17566:274::-;-1:-1:-1;;;;;17758:32:1;;;;17740:51;;17822:2;17807:18;;17800:34;17728:2;17713:18;;17566:274::o;18313:339::-;18515:2;18497:21;;;18554:2;18534:18;;;18527:30;-1:-1:-1;;;18588:2:1;18573:18;;18566:45;18643:2;18628:18;;18313:339::o;18657:970::-;-1:-1:-1;;;;;19080:15:1;;;19062:34;;19132:15;;19127:2;19112:18;;19105:43;19184:3;19179:2;19164:18;;19157:31;;;19005:4;;19211:63;;19254:19;;19246:6;19238;19211:63;:::i;:::-;19310:6;19305:2;19294:9;19290:18;19283:34;19354:6;19348:3;19337:9;19333:19;19326:35;19410:9;19402:6;19398:22;19392:3;19381:9;19377:19;19370:51;19444:50;19487:6;19479;19471;19444:50;:::i;:::-;19430:64;;19543:9;19535:6;19531:22;19525:3;19514:9;19510:19;19503:51;19571:50;19614:6;19606;19598;19571:50;:::i;:::-;19563:58;18657:970;-1:-1:-1;;;;;;;;;;;;;18657:970:1:o;19632:770::-;19961:3;19950:9;19943:22;19924:4;19988:63;20046:3;20035:9;20031:19;20023:6;20015;19988:63;:::i;:::-;20087:6;20082:2;20071:9;20067:18;20060:34;20130:6;20125:2;20114:9;20110:18;20103:34;20185:9;20177:6;20173:22;20168:2;20157:9;20153:18;20146:50;20219;20262:6;20254;20246;20219:50;:::i;:::-;20205:64;;20318:9;20310:6;20306:22;20300:3;20289:9;20285:19;20278:51;20346:50;20389:6;20381;20373;20346:50;:::i;:::-;20338:58;19632:770;-1:-1:-1;;;;;;;;;;;19632:770:1:o;21494:952::-;21840:4;21869:3;21899:2;21888:9;21881:21;21925:62;21983:2;21972:9;21968:18;21960:6;21952;21925:62;:::i;:::-;22018:2;22003:18;;21996:34;;;-1:-1:-1;;;;;22104:15:1;;;22099:2;22084:18;;22077:43;22156:15;;;22151:2;22136:18;;22129:43;22203:3;22188:19;;22181:35;;;22057:3;22232:19;;22225:35;;;22297:15;;22291:3;22276:19;;22269:44;22350:22;;;22344:3;22329:19;;22322:51;21911:76;-1:-1:-1;22390:50:1;21911:76;22425:6;22417;22390:50;:::i;22802:397::-;23004:2;22986:21;;;23043:2;23023:18;;;23016:30;23082:34;23077:2;23062:18;;23055:62;-1:-1:-1;;;23148:2:1;23133:18;;23126:31;23189:3;23174:19;;22802:397::o;23563:516::-;-1:-1:-1;;;;;23842:15:1;;;23824:34;;23894:15;;23889:2;23874:18;;23867:43;23941:2;23926:18;;23919:34;;;23989:3;23984:2;23969:18;;23962:31;;;23767:4;;24010:63;;24053:19;;24045:6;24037;24010:63;:::i;24084:127::-;24145:10;24140:3;24136:20;24133:1;24126:31;24176:4;24173:1;24166:15;24200:4;24197:1;24190:15;24216:258;24288:1;24298:113;24312:6;24309:1;24306:13;24298:113;;;24388:11;;;24382:18;24369:11;;;24362:39;24334:2;24327:10;24298:113;;;24429:6;24426:1;24423:13;24420:48;;;-1:-1:-1;;24464:1:1;24446:16;;24439:27;24216:258::o;24479:1005::-;24564:6;24572;24625:2;24613:9;24604:7;24600:23;24596:32;24593:52;;;24641:1;24638;24631:12;24593:52;24673:9;24667:16;24692:28;24714:5;24692:28;:::i;:::-;24788:2;24773:18;;24767:25;24739:5;;-1:-1:-1;24811:18:1;24841:14;;;24838:34;;;24868:1;24865;24858:12;24838:34;24906:6;24895:9;24891:22;24881:32;;24951:7;24944:4;24940:2;24936:13;24932:27;24922:55;;24973:1;24970;24963:12;24922:55;25002:2;24996:9;25024:2;25020;25017:10;25014:36;;;25030:18;;:::i;:::-;25105:2;25099:9;25073:2;25159:13;;-1:-1:-1;;25155:22:1;;;25179:2;25151:31;25147:40;25135:53;;;25203:18;;;25223:22;;;25200:46;25197:72;;;25249:18;;:::i;:::-;25289:10;25285:2;25278:22;25324:2;25316:6;25309:18;25364:7;25359:2;25354;25350;25346:11;25342:20;25339:33;25336:53;;;25385:1;25382;25375:12;25336:53;25398:55;25450:2;25445;25437:6;25433:15;25428:2;25424;25420:11;25398:55;:::i;:::-;25472:6;25462:16;;;;;;;24479:1005;;;;;:::o;25489:257::-;25530:3;25568:5;25562:12;25595:6;25590:3;25583:19;25611:63;25667:6;25660:4;25655:3;25651:14;25644:4;25637:5;25633:16;25611:63;:::i;:::-;25728:2;25707:15;-1:-1:-1;;25703:29:1;25694:39;;;;25735:4;25690:50;;25489:257;-1:-1:-1;;25489:257:1:o;25751:1007::-;26103:4;26132:3;26162:2;26151:9;26144:21;26188:62;26246:2;26235:9;26231:18;26223:6;26215;26188:62;:::i;:::-;26281:2;26266:18;;26259:34;;;-1:-1:-1;;;;;26367:15:1;;;26362:2;26347:18;;26340:43;26419:15;;26414:2;26399:18;;26392:43;26466:3;26451:19;;26444:35;;;26320:3;26495:19;;26488:35;;;26567:14;;26560:22;26554:3;26539:19;;26532:51;26627:14;;26620:22;26614:3;26599:19;;26592:51;26680:22;;;26674:3;26659:19;;26652:51;26174:76;-1:-1:-1;26720:32:1;26174:76;26737:6;26720:32;:::i;28173:633::-;28456:3;28445:9;28438:22;28419:4;28483:63;28541:3;28530:9;28526:19;28518:6;28510;28483:63;:::i;:::-;28582:6;28577:2;28566:9;28562:18;28555:34;28625:6;28620:2;28609:9;28605:18;28598:34;28682:6;28675:14;28668:22;28663:2;28652:9;28648:18;28641:50;28740:9;28732:6;28728:22;28722:3;28711:9;28707:19;28700:51;28768:32;28793:6;28785;28768:32;:::i;:::-;28760:40;28173:633;-1:-1:-1;;;;;;;;;28173:633:1:o;28811:127::-;28872:10;28867:3;28863:20;28860:1;28853:31;28903:4;28900:1;28893:15;28927:4;28924:1;28917:15;28943:135;28982:3;29003:17;;;29000:43;;29023:18;;:::i;:::-;-1:-1:-1;29070:1:1;29059:13;;28943:135::o;29427:241::-;29483:6;29536:2;29524:9;29515:7;29511:23;29507:32;29504:52;;;29552:1;29549;29542:12;29504:52;29591:9;29578:23;29610:28;29632:5;29610:28;:::i;29673:125::-;29713:4;29741:1;29738;29735:8;29732:34;;;29746:18;;:::i;:::-;-1:-1:-1;29783:9:1;;29673:125::o;32710:274::-;32839:3;32877:6;32871:13;32893:53;32939:6;32934:3;32927:4;32919:6;32915:17;32893:53;:::i;:::-;32962:16;;;;;32710:274;-1:-1:-1;;32710:274:1:o;32989:219::-;33138:2;33127:9;33120:21;33101:4;33158:44;33198:2;33187:9;33183:18;33175:6;33158:44;:::i
Swarm Source
ipfs://7094eaa6fd197fad6a7de0eba1b4d4e566f3d0c12f5ebe91a98ea62eb6e36dd3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|