{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockTimeSwapRouter02",
  "sourceName": "contracts/test/MockTimeSwapRouter.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factoryClassic",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "factoryCL",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_positionManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_SAMB",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "SAMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveMax",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveMaxMinusOne",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveZeroThenMax",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveZeroThenMaxMinusOne",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "astraCLSwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "callPositionManager",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "paths",
          "type": "bytes[]"
        },
        {
          "internalType": "uint128[]",
          "name": "amounts",
          "type": "uint128[]"
        },
        {
          "internalType": "uint24",
          "name": "maximumTickDivergence",
          "type": "uint24"
        },
        {
          "internalType": "uint32",
          "name": "secondsAgo",
          "type": "uint32"
        }
      ],
      "name": "checkOracleSlippage",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        },
        {
          "internalType": "uint24",
          "name": "maximumTickDivergence",
          "type": "uint24"
        },
        {
          "internalType": "uint32",
          "name": "secondsAgo",
          "type": "uint32"
        }
      ],
      "name": "checkOracleSlippage",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactInputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactOutputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factoryClassic",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "getApprovalType",
      "outputs": [
        {
          "internalType": "enum IApproveAndCall.ApprovalType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            }
          ],
          "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "increaseLiquidity",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            }
          ],
          "internalType": "struct IApproveAndCall.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previousBlockhash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "positionManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "pull",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "setTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "swapExactTokensForTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "swapTokensForExactTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "sweepTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "sweepTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        }
      ],
      "name": "unwrapSAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMBWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMBWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "wrapAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101006040526000196000553480156200001857600080fd5b5060405162006171380380620061718339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fed62000184600039806102dc528061158d52806115cd52806116f752806118a052806119ca52806123a852806129f95280612a595280612ada52508061099c5280611f485280613d175250806115695280611c0a5280611f9e5280613216525080610d5c5280610e3052806110d052806113995280612f3252806130f55250615fed6000f3fe6080604052600436106102bf5760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a7146106a9578063f2d5d56b146106c9578063f3995c67146106dc5761036a565b8063efdeed8e14610676578063f100b205146106965761036a565b8063e0e189a0116100b0578063e0e189a01461063d578063e4a4054514610650578063e90a182f146106635761036a565b8063dee00f35146105fd578063df2ab5bb1461062a5761036a565b8063bc122a5411610122578063c45a015511610107578063c45a0155146105cd578063c53af304146105e2578063cab372ce146105ea5761036a565b8063bc122a54146105a7578063c2e3140a146105ba5761036a565b8063acf8a4ed11610153578063acf8a4ed1461056e578063b3a2af1314610581578063b858183f146105945761036a565b8063ab3fdd5014610548578063ac9650d81461055b5761036a565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d1461050f578063a4a78f0c14610522578063a98ce37f146105355761036a565b8063791b98bc146104e557806390793ea8146104fa5761036a565b8063571ac8b011610201578063571ac8b0146104ac5780635ae401dc146104bf578063639d71a9146104d25761036a565b80634f04a0db146104775780635023b4df146104995761036a565b80633068c5541161027357806342712a671161025857806342712a671461043e5780634659a49414610451578063472b43f3146104645761036a565b80633068c5541461040b5780633beb26c41461041e5761036a565b806311c17848116102a457806311c17848146103ab57806311ed56c9146103cb5780631f0464d1146103eb5761036a565b806304e45aaf1461036f57806309b81346146103985761036a565b3661036a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461036857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61038261037d36600461557f565b6106ef565b60405161038f9190615e39565b60405180910390f35b6103826103a636600461561a565b610877565b3480156103b757600080fd5b506103686103c63660046153f4565b610957565b6103de6103d9366004615674565b610aa7565b60405161038f9190615bb6565b6103fe6103f93660046152e3565b610cb3565b60405161038f9190615b38565b610368610419366004615114565b610d3d565b34801561042a57600080fd5b506103686104393660046157f7565b610d50565b61038261044c3660046158c1565b610d55565b61036861045f36600461515d565b610f2f565b6103826104723660046158c1565b610fe3565b34801561048357600080fd5b5061048c611397565b60405161038f9190615a78565b6103826104a7366004615652565b6113bb565b6103686104ba366004615027565b6114a4565b6103fe6104cd3660046152e3565b6114da565b6103686104e0366004615027565b611553565b3480156104f157600080fd5b5061048c611567565b34801561050657600080fd5b5061048c61158b565b61036861051d366004615856565b6115af565b61036861053036600461515d565b6117c7565b610368610543366004615827565b61189c565b610368610556366004615027565b611a62565b6103fe6105693660046151b8565b611aa0565b61036861057c3660046157f7565b611bfa565b6103de61058f36600461532d565b611c04565b6103826105a23660046154d9565b611cc2565b6103686105b5366004615894565b611e85565b6103686105c836600461515d565b611e91565b3480156105d957600080fd5b5061048c611f46565b610368611f6a565b6103686105f8366004615027565b611a76565b34801561060957600080fd5b5061061d61061836600461504a565b611f7c565b60405161038f9190615bc9565b610368610638366004615075565b612129565b61036861064b3660046150b6565b612240565b61036861065e3660046157f7565b6123a6565b61036861067136600461504a565b612422565b34801561068257600080fd5b506103686106913660046151f8565b612431565b6103de6106a4366004615663565b612483565b3480156106b557600080fd5b506103686106c4366004615360565b612523565b6103686106d736600461504a565b612574565b6103686106ea36600461515d565b612580565b6000806000836080015114156107ac575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610756903090600401615a78565b60206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a6919061580f565b60808401525b610828836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107ea939291906159e6565b604051602081830303815290604052815260200186610809573361080b565b305b73ffffffffffffffffffffffffffffffffffffffff169052612618565b91508260a00151821015610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b60405180910390fd5b50919050565b60006108eb604083018035906108909060208601615027565b60408051808201909152600090806108a88880615e7d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020909101526127c9565b5050600054606082013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008413806109665750600083135b61096f57600080fd5b600061097d82840184615686565b9050600080600061099184600001516129b0565b9250925092506109c37f00000000000000000000000000000000000000000000000000000000000000008484846129e1565b5060008060008a13610a04578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610a35565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a5457610a4f85876020015133846129f7565b610a9b565b8551610a5f90612bd5565b15610a84578551610a6f90612bdd565b8652610a7e81336000896127c9565b50610a9b565b80600081905550610a9b84876020015133846129f7565b50505050505050505050565b604080516101608101909152606090610cab907f88316456000000000000000000000000000000000000000000000000000000009080610aea6020870187615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610b189190615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b4360608701604088016157dd565b62ffffff168152602001610b5d60808701606088016153b5565b60020b8152602001610b7560a08701608088016153b5565b60020b8152602090810190610b9590610b9090880188615027565b612c12565b8152602001610bb0866020016020810190610b909190615027565b815260a0860135602082015260c08601356040820152606001610bda610100870160e08801615027565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615d34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c04565b90505b919050565b60608380600143034014610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d328484611aa0565b91505b509392505050565b610d4a8484338585612240565b50505050565b600155565b6000610db57f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb792505050565b600081518110610dc157fe5b6020026020010151905084811115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b610e9e84846000818110610e1557fe5b9050602002016020810190610e2a9190615027565b33610e987f000000000000000000000000000000000000000000000000000000000000000088886000818110610e5c57fe5b9050602002016020810190610e719190615027565b89896001818110610e7e57fe5b9050602002016020810190610e939190615027565b612df0565b846129f7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610ec557339150610ee8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ee8573091505b610f26848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612edb915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610fcf57600080fd5b505af1158015610a9b573d6000803e3d6000fd5b60008086611099575060018484600081610ff957fe5b905060200201602081019061100e9190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110469190615a78565b60206040518083038186803b15801561105e57600080fd5b505afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611096919061580f565b96505b611124858560008181106110a957fe5b90506020020160208101906110be9190615027565b826110c957336110cb565b305b61111e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110fc57fe5b90506020020160208101906111119190615027565b8a8a6001818110610e7e57fe5b8a6129f7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561114b5733925061116e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561116e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061119e57fe5b90506020020160208101906111b39190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111eb9190615a78565b60206040518083038186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b919061580f565b905061127b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612edb915050565b6113508187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106112ad57fe5b90506020020160208101906112c29190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112fa9190615a78565b60206040518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a919061580f565b906131e0565b92508683101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611464608083018035906113d49060608601615027565b6113e460e0860160c08701615027565b60405180604001604052808760200160208101906114029190615027565b61141260608a0160408b016157dd565b61141f60208b018b615027565b604051602001611431939291906159e6565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff168152506127c9565b90508160a0013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b6114ce817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b6114d757600080fd5b50565b606083806114e661333c565b1115610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61155e8160006131f0565b6114a457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156115c0575060648211155b6115c957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561165257600080fd5b505afa158015611666573d6000803e3d6000fd5b505050506040513d602081101561167c57600080fd5b50519050848110156116ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b80156117c0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b505050506000612710611798858461334290919063ffffffff16565b8161179f57fe5b04905080156117b2576117b28382613366565b6117be85828403613366565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b505110156117be576117be868686868686610f2f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b50519050828110156119c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a5d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a3b57600080fd5b505af1158015611a4f573d6000803e3d6000fd5b50505050611a5d8282613366565b505050565b611a6d8160006131f0565b611a7657600080fd5b6114ce817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b60608167ffffffffffffffff81118015611ab957600080fd5b50604051908082528060200260200182016040528015611aed57816020015b6060815260200190600190039081611ad85790505b50905060005b82811015611bf35760008030868685818110611b0b57fe5b9050602002810190611b1d9190615e7d565b604051611b2b929190615a4c565b600060405180830381855af49150503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b509150915081611bd157604481511015611b8457600080fd5b60048101905080806020019051810190611b9e919061546f565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108689190615bb6565b80848481518110611bde57fe5b60209081029190910101525050600101611af3565b5092915050565b6114d7813361189c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c4d9190615a5c565b6000604051808303816000865af19150503d8060008114611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b50925090508061087157604482511015611ca857600080fd5b60048201915081806020019051810190611b9e919061546f565b600080600083604001511415611d9357600190506000611ce584600001516129b0565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611d3c903090600401615a78565b60206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8c919061580f565b6040850152505b600081611da05733611da2565b305b90505b6000611db48560000151612bd5565b9050611e0d856040015182611dcd578660200151611dcf565b305b60006040518060400160405280611de98b600001516134b4565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250612618565b60408601528015611e2d578451309250611e2690612bdd565b8552611e3a565b8460400151935050611e40565b50611da5565b8360600151831015611e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b5050919050565b611a5d833384846115af565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611f0657600080fd5b505afa158015611f1a573d6000803e3d6000fd5b505050506040513d6020811015611f3057600080fd5b505110156117be576117be868686868686612580565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f7a57611f7a3347613366565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611fda929190615a99565b60206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a919061580f565b1061203757506000612123565b612061837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b1561206e57506001612123565b612098837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b156120a557506002612123565b6120b08360006131f0565b6120b957600080fd5b6120e3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b156120f057506003612123565b61211a837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b1561036a575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561219257600080fd5b505afa1580156121a6573d6000803e3d6000fd5b505050506040513d60208110156121bc57600080fd5b505190508281101561222f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d4a57610d4a8483836134c3565b600082118015612251575060648211155b61225a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b505190508481101561236057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156117be5760006127106123758386613342565b8161237c57fe5b0490508015612390576123908784836134c3565b61239d87868385036134c3565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561240e57600080fd5b505af11580156117be573d6000803e3d6000fd5b61242d828233612129565b5050565b60008061243f868685613698565b915091508362ffffff16818303126117be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b6060610cab63219f5d1760e01b6040518060c00160405280856040013581526020016124bb866000016020810190610b909190615027565b81526020016124d6866020016020810190610b909190615027565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615cf0565b60008061253085846138ab565b915091508362ffffff16818303126117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b61242d82333084613b33565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610fcf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561264157339350612664565b73ffffffffffffffffffffffffffffffffffffffff841660021415612664573093505b600080600061267685600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806126a7868686613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126cd8f613d4e565b73ffffffffffffffffffffffffffffffffffffffff8e16156126ef578d612715565b8761270e5773fffd8963efd1fc6a506488495d951d5263988d25612715565b6401000276a45b8d6040516020016127269190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612755959493929190615ac0565b6040805180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a691906153d1565b91509150826127b557816127b7565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127f257339350612815565b73ffffffffffffffffffffffffffffffffffffffff841660021415612815573093505b600080600061282785600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612858858786613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561287e8f613d4e565b60000373ffffffffffffffffffffffffffffffffffffffff8e16156128a3578d6128c9565b876128c25773fffd8963efd1fc6a506488495d951d5263988d256128c9565b6401000276a45b8d6040516020016128da9190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612909959493929190615ac0565b6040805180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a91906153d1565b9150915060008361296f578183600003612975565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a166129a1578b81146129a157600080fd5b50505050505050949350505050565b600080806129be8482613d80565b92506129cb846014613e80565b90506129d8846017613d80565b91509193909250565b6000610f26856129f2868686613f70565b613fed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a525750804710155b15612b9b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abf57600080fd5b505af1158015612ad3573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b505050506040513d6020811015612b9357600080fd5b50610d4a9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612bc957612bc48483836134c3565b610d4a565b610d4a84848484613b33565b516042111590565b8051606090610cab9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161401d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c67903090600401615a78565b60206040518083038186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab919061580f565b6060600282511015612cc857600080fd5b815167ffffffffffffffff81118015612ce057600080fd5b50604051908082528060200260200182016040528015612d0a578160200160208202803683370190505b5090508281600183510381518110612d1e57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610d3557600080612d8b87866001860381518110612d6a57fe5b6020026020010151878681518110612d7e57fe5b6020026020010151614204565b91509150612dad848481518110612d9e57fe5b602002602001015183836142ec565b846001850381518110612dbc57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d4e565b6000806000612dff85856143c2565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a5d57600080848381518110612ef957fe5b6020026020010151858460010181518110612f1057fe5b6020026020010151915091506000612f2883836143c2565b5090506000612f587f00000000000000000000000000000000000000000000000000000000000000008585612df0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612fa657600080fd5b505afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde9190615716565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613040578284613043565b83835b91509150613084828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112fa9190615a78565b9550613091868383614467565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146130d5578260006130d9565b6000835b91509150600060028c51038a106130f0578a613131565b6131317f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061312457fe5b6020026020010151612df0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131999086908690869060248101615e42565b600060405180830381600087803b1580156131b357600080fd5b505af11580156131c7573d6000803e3d6000fd5b50506001909b019a50612ede9950505050505050505050565b8082038281111561212357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613247929190615b12565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132d09190615a5c565b6000604051808303816000865af19150503d806000811461330d576040519150601f19603f3d011682016040523d82523d6000602084013e613312565b606091505b5091509150818015610f26575080511580610f26575080806020019051810190610f2691906152c9565b60015490565b600082158061335d5750508181028183828161335a57fe5b04145b61212357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106133dd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016133a0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b5050905080611a5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610cab826000602b61401d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061359857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161355b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135fa576040519150601f19603f3d011682016040523d82523d6000602084013e6135ff565b606091505b509150915081801561362d57508051158061362d575080806020019051602081101561362a57600080fd5b50515b6117c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008083518551146136a957600080fd5b6000855167ffffffffffffffff811180156136c357600080fd5b506040519080825280602002602001820160405280156136fd57816020015b6136ea614e70565b8152602001906001900390816136e25790505b5090506000865167ffffffffffffffff8111801561371a57600080fd5b5060405190808252806020026020018201604052801561375457816020015b613741614e70565b8152602001906001900390816137395790505b50905060005b8751811015613884576000806137838a848151811061377557fe5b6020026020010151896138ab565b915091506137908261453d565b85848151811061379c57fe5b60200260200101516000019060020b908160020b815250506137bd8161453d565b8484815181106137c957fe5b60200260200101516000019060020b908160020b815250508883815181106137ed57fe5b602002602001015185848151811061380157fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061384357fe5b602002602001015184848151811061385757fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff909216910152505060010161375a565b5061388e8261454e565b60020b935061389c8161454e565b60020b92505050935093915050565b6000806000806138ba86614636565b90506000805b82811015613ad85760008060006138d68b6129b0565b92509250925060006138e9848484613d10565b905060008063ffffffff8d166139125761390283614661565b600291820b9350900b90506139b4565b61391c838e6148f9565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561396d57600080fd5b505afa158015613981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a59190615751565b50505060029290920b93505050505b600189038714156139f5578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16109950613a04565b6139fe8e612bdd565b9d508597505b6000871580613aa557508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a75578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613aa5565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613aba579b82019b9a81019a613ac5565b828d039c50818c039b505b5050600190950194506138c09350505050565b5082613b29577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613c1057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bd3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c72576040519150601f19603f3d011682016040523d82523d6000602084013e613c77565b606091505b5091509150818015613ca5575080511580613ca55750808060200190516020811015613ca257600080fd5b50515b6117be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d467f0000000000000000000000000000000000000000000000000000000000000000613d41868686613f70565b614d2a565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d7c57600080fd5b5090565b600081826014011015613df457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613ef457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f78614e87565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613fb0579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613ff98383614d2a565b90503373ffffffffffffffffffffffffffffffffffffffff82161461212357600080fd5b60608182601f01101561409157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561410257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561417457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561419357604051915060008252602082016040526141fb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141cc5780518352602092830192016141b4565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600080600061421385856143c2565b509050600080614224888888612df0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561426957600080fd5b505afa15801561427d573d6000803e3d6000fd5b505050506040513d606081101561429357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146142da5780826142dd565b81815b90999098509650505050505050565b600080841161435c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561436c5750600082115b61437557600080fd5b600061438d6103e86143878688613342565b90613342565b905060006143a16103e561438786896131e0565b90506143b860018284816143b157fe5b0490614e60565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143fe57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061443857828461443b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661446057600080fd5b9250929050565b60008084116144d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144e75750600082115b6144f057600080fd5b60006144fe856103e5613342565b9050600061450c8285613342565b9050600061452683614520886103e8613342565b90614e60565b905080828161453157fe5b04979650505050505050565b80600281900b8114610cae57600080fd5b6000806000805b84518110156145e35784818151811061456a57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061459457fe5b60200260200101516000015160020b02830192508481815181106145b457fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614555565b508082816145ed57fe5b059250600082128015614608575080828161460457fe5b0715155b15611e7e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156146ad57600080fd5b505afa1580156146c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e59190615751565b50939750919550935050600161ffff84161191506147319050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c14565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161476d9190615e2a565b60806040518083038186803b15801561478557600080fd5b505afa158015614799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147bd919061591c565b5050915091506147cb61333c565b63ffffffff168263ffffffff16146147e5578495506148f0565b60008361ffff1660018561ffff168761ffff1601038161480157fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148429190615e39565b60806040518083038186803b15801561485a57600080fd5b505afa15801561486e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614892919061591c565b93505092509250806148d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615bdd565b82860363ffffffff811683870360060b816148e757fe5b059a5050505050505b50505050915091565b60008063ffffffff831661496e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061499d57fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106149c657fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a61578181015183820152602001614a49565b505050509050019250505060006040518083038186803b158015614a8457600080fd5b505afa158015614a98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614adf57600080fd5b8101908080516040519392919084640100000000821115614aff57600080fd5b908301906020820185811115614b1457600080fd5b8251866020820283011164010000000082111715614b3157600080fd5b82525081516020918201928201910280838360005b83811015614b5e578181015183820152602001614b46565b5050505090500160405260200180516040519392919084640100000000821115614b8757600080fd5b908301906020820185811115614b9c57600080fd5b8251866020820283011164010000000082111715614bb957600080fd5b82525081516020918201928201910280838360005b83811015614be6578181015183820152602001614bce565b5050505090500160405250505091509150600082600081518110614c0657fe5b602002602001015183600181518110614c1b57fe5b6020026020010151039050600082600081518110614c3557fe5b602002602001015183600181518110614c4a57fe5b60200260200101510390508763ffffffff168260060b81614c6757fe5b05965060008260060b128015614c9157508763ffffffff168260060b81614c8a57fe5b0760060b15155b15614cbc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614d1a57fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d6c57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561212357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610cae81615f8e565b60008083601f840112614ec3578182fd5b50813567ffffffffffffffff811115614eda578182fd5b602083019150836020808302850101111561446057600080fd5b600082601f830112614f04578081fd5b81356020614f19614f1483615f04565b615ee0565b8281528181019085830183850287018401881015614f35578586fd5b855b85811015614f705781356fffffffffffffffffffffffffffffffff81168114614f5e578788fd5b84529284019290840190600101614f37565b5090979650505050505050565b80518015158114610cae57600080fd5b600082601f830112614f9d578081fd5b8135614fab614f1482615f22565b818152846020838601011115614fbf578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610cae57600080fd5b805161ffff81168114610cae57600080fd5b803562ffffff81168114610cae57600080fd5b8035610cae81615fbf565b600060208284031215615038578081fd5b813561504381615f8e565b9392505050565b6000806040838503121561505c578081fd5b823561506781615f8e565b946020939093013593505050565b600080600060608486031215615089578081fd5b833561509481615f8e565b92506020840135915060408401356150ab81615f8e565b809150509250925092565b600080600080600060a086880312156150cd578283fd5b85356150d881615f8e565b94506020860135935060408601356150ef81615f8e565b925060608601359150608086013561510681615f8e565b809150509295509295909350565b60008060008060808587031215615129578182fd5b843561513481615f8e565b93506020850135925060408501359150606085013561515281615f8e565b939692955090935050565b60008060008060008060c08789031215615175578384fd5b863561518081615f8e565b95506020870135945060408701359350606087013561519e81615fd1565b9598949750929560808101359460a0909101359350915050565b600080602083850312156151ca578182fd5b823567ffffffffffffffff8111156151e0578283fd5b6151ec85828601614eb2565b90969095509350505050565b6000806000806080858703121561520d578182fd5b843567ffffffffffffffff80821115615224578384fd5b818701915087601f830112615237578384fd5b81356020615247614f1483615f04565b82815281810190858301885b8581101561527c5761526a8e8684358b0101614f8d565b84529284019290840190600101615253565b50909950505088013592505080821115615294578384fd5b506152a187828801614ef4565b9350506152b060408601615009565b91506152be6060860161501c565b905092959194509250565b6000602082840312156152da578081fd5b61504382614f7d565b6000806000604084860312156152f7578081fd5b83359250602084013567ffffffffffffffff811115615314578182fd5b61532086828701614eb2565b9497909650939450505050565b60006020828403121561533e578081fd5b813567ffffffffffffffff811115615354578182fd5b613d4684828501614f8d565b600080600060608486031215615374578081fd5b833567ffffffffffffffff81111561538a578182fd5b61539686828701614f8d565b9350506153a560208501615009565b915060408401356150ab81615fbf565b6000602082840312156153c6578081fd5b813561504381615fb0565b600080604083850312156153e3578182fd5b505080516020909101519092909150565b60008060008060608587031215615409578182fd5b8435935060208501359250604085013567ffffffffffffffff8082111561542e578384fd5b818701915087601f830112615441578384fd5b81358181111561544f578485fd5b886020828501011115615460578485fd5b95989497505060200194505050565b600060208284031215615480578081fd5b815167ffffffffffffffff811115615496578182fd5b8201601f810184136154a6578182fd5b80516154b4614f1482615f22565b8181528560208385010111156154c8578384fd5b610f26826020830160208601615f62565b6000602082840312156154ea578081fd5b813567ffffffffffffffff80821115615501578283fd5b9083019060808286031215615514578283fd5b60405160808101818110838211171561552957fe5b60405282358281111561553a578485fd5b61554687828601614f8d565b8252506020830135915061555982615f8e565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615590578081fd5b60405160e0810181811067ffffffffffffffff821117156155ad57fe5b6040526155b983614ea7565b81526155c760208401614ea7565b60208201526155d860408401615009565b60408201526155e960608401614ea7565b60608201526080830135608082015260a083013560a082015261560e60c08401614ea7565b60c08201529392505050565b60006020828403121561562b578081fd5b813567ffffffffffffffff811115615641578182fd5b820160808185031215615043578182fd5b600060e08284031215610871578081fd5b600060a08284031215610871578081fd5b60006101008284031215610871578081fd5b600060208284031215615697578081fd5b813567ffffffffffffffff808211156156ae578283fd5b90830190604082860312156156c1578283fd5b6040516040810181811083821117156156d657fe5b6040528235828111156156e7578485fd5b6156f387828601614f8d565b8252506020830135925061570683615f8e565b6020810192909252509392505050565b60008060006060848603121561572a578081fd5b61573384614fd9565b925061574160208501614fd9565b915060408401516150ab81615fbf565b600080600080600080600060e0888a03121561576b578485fd5b875161577681615f8e565b602089015190975061578781615fb0565b955061579560408901614ff7565b94506157a360608901614ff7565b93506157b160808901614ff7565b925060a08801516157c181615fd1565b91506157cf60c08901614f7d565b905092959891949750929550565b6000602082840312156157ee578081fd5b61504382615009565b600060208284031215615808578081fd5b5035919050565b600060208284031215615820578081fd5b5051919050565b60008060408385031215615839578182fd5b82359150602083013561584b81615f8e565b809150509250929050565b6000806000806080858703121561586b578182fd5b84359350602085013561587d81615f8e565b925060408501359150606085013561515281615f8e565b6000806000606084860312156158a8578081fd5b833592506020840135915060408401356150ab81615f8e565b6000806000806000608086880312156158d8578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158fc578384fd5b61590888828901614eb2565b909450925050606086013561510681615f8e565b60008060008060808587031215615931578182fd5b845161593c81615fbf565b8094505060208501518060060b8114615953578283fd5b604086015190935061596481615f8e565b91506152be60608601614f7d565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526159a4816020860160208601615f62565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a6e818460208701615f62565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615b0760a083018461598c565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615ba9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b9785835161598c565b94509285019290850190600101615b5d565b5092979650505050505050565b600060208252615043602083018461598c565b6020810160058310615bd757fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d48828451615972565b6020830151615d5a6020840182615972565b506040830151615d6d60408401826159dd565b506060830151615d8060608401826159d6565b506080830151615d9360808401826159d6565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615dd182850182615972565b505061014092830151919092015290565b600060208252825160406020840152615dfe606084018261598c565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff84166040830152608060608301526143b8608083018461598c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615eb1578283fd5b83018035915067ffffffffffffffff821115615ecb578283fd5b60200191503681900382131561446057600080fd5b60405181810167ffffffffffffffff81118282101715615efc57fe5b604052919050565b600067ffffffffffffffff821115615f1857fe5b5060209081020190565b600067ffffffffffffffff821115615f3657fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f7d578181015183820152602001615f65565b83811115610d4a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146114d757600080fd5b8060020b81146114d757600080fd5b63ffffffff811681146114d757600080fd5b60ff811681146114d757600080fdfea164736f6c6343000706000a",
  "deployedBytecode": "0x6080604052600436106102bf5760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a7146106a9578063f2d5d56b146106c9578063f3995c67146106dc5761036a565b8063efdeed8e14610676578063f100b205146106965761036a565b8063e0e189a0116100b0578063e0e189a01461063d578063e4a4054514610650578063e90a182f146106635761036a565b8063dee00f35146105fd578063df2ab5bb1461062a5761036a565b8063bc122a5411610122578063c45a015511610107578063c45a0155146105cd578063c53af304146105e2578063cab372ce146105ea5761036a565b8063bc122a54146105a7578063c2e3140a146105ba5761036a565b8063acf8a4ed11610153578063acf8a4ed1461056e578063b3a2af1314610581578063b858183f146105945761036a565b8063ab3fdd5014610548578063ac9650d81461055b5761036a565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d1461050f578063a4a78f0c14610522578063a98ce37f146105355761036a565b8063791b98bc146104e557806390793ea8146104fa5761036a565b8063571ac8b011610201578063571ac8b0146104ac5780635ae401dc146104bf578063639d71a9146104d25761036a565b80634f04a0db146104775780635023b4df146104995761036a565b80633068c5541161027357806342712a671161025857806342712a671461043e5780634659a49414610451578063472b43f3146104645761036a565b80633068c5541461040b5780633beb26c41461041e5761036a565b806311c17848116102a457806311c17848146103ab57806311ed56c9146103cb5780631f0464d1146103eb5761036a565b806304e45aaf1461036f57806309b81346146103985761036a565b3661036a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461036857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61038261037d36600461557f565b6106ef565b60405161038f9190615e39565b60405180910390f35b6103826103a636600461561a565b610877565b3480156103b757600080fd5b506103686103c63660046153f4565b610957565b6103de6103d9366004615674565b610aa7565b60405161038f9190615bb6565b6103fe6103f93660046152e3565b610cb3565b60405161038f9190615b38565b610368610419366004615114565b610d3d565b34801561042a57600080fd5b506103686104393660046157f7565b610d50565b61038261044c3660046158c1565b610d55565b61036861045f36600461515d565b610f2f565b6103826104723660046158c1565b610fe3565b34801561048357600080fd5b5061048c611397565b60405161038f9190615a78565b6103826104a7366004615652565b6113bb565b6103686104ba366004615027565b6114a4565b6103fe6104cd3660046152e3565b6114da565b6103686104e0366004615027565b611553565b3480156104f157600080fd5b5061048c611567565b34801561050657600080fd5b5061048c61158b565b61036861051d366004615856565b6115af565b61036861053036600461515d565b6117c7565b610368610543366004615827565b61189c565b610368610556366004615027565b611a62565b6103fe6105693660046151b8565b611aa0565b61036861057c3660046157f7565b611bfa565b6103de61058f36600461532d565b611c04565b6103826105a23660046154d9565b611cc2565b6103686105b5366004615894565b611e85565b6103686105c836600461515d565b611e91565b3480156105d957600080fd5b5061048c611f46565b610368611f6a565b6103686105f8366004615027565b611a76565b34801561060957600080fd5b5061061d61061836600461504a565b611f7c565b60405161038f9190615bc9565b610368610638366004615075565b612129565b61036861064b3660046150b6565b612240565b61036861065e3660046157f7565b6123a6565b61036861067136600461504a565b612422565b34801561068257600080fd5b506103686106913660046151f8565b612431565b6103de6106a4366004615663565b612483565b3480156106b557600080fd5b506103686106c4366004615360565b612523565b6103686106d736600461504a565b612574565b6103686106ea36600461515d565b612580565b6000806000836080015114156107ac575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610756903090600401615a78565b60206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a6919061580f565b60808401525b610828836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107ea939291906159e6565b604051602081830303815290604052815260200186610809573361080b565b305b73ffffffffffffffffffffffffffffffffffffffff169052612618565b91508260a00151821015610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b60405180910390fd5b50919050565b60006108eb604083018035906108909060208601615027565b60408051808201909152600090806108a88880615e7d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020909101526127c9565b5050600054606082013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008413806109665750600083135b61096f57600080fd5b600061097d82840184615686565b9050600080600061099184600001516129b0565b9250925092506109c37f00000000000000000000000000000000000000000000000000000000000000008484846129e1565b5060008060008a13610a04578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610a35565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a5457610a4f85876020015133846129f7565b610a9b565b8551610a5f90612bd5565b15610a84578551610a6f90612bdd565b8652610a7e81336000896127c9565b50610a9b565b80600081905550610a9b84876020015133846129f7565b50505050505050505050565b604080516101608101909152606090610cab907f88316456000000000000000000000000000000000000000000000000000000009080610aea6020870187615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610b189190615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b4360608701604088016157dd565b62ffffff168152602001610b5d60808701606088016153b5565b60020b8152602001610b7560a08701608088016153b5565b60020b8152602090810190610b9590610b9090880188615027565b612c12565b8152602001610bb0866020016020810190610b909190615027565b815260a0860135602082015260c08601356040820152606001610bda610100870160e08801615027565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615d34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c04565b90505b919050565b60608380600143034014610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d328484611aa0565b91505b509392505050565b610d4a8484338585612240565b50505050565b600155565b6000610db57f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb792505050565b600081518110610dc157fe5b6020026020010151905084811115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b610e9e84846000818110610e1557fe5b9050602002016020810190610e2a9190615027565b33610e987f000000000000000000000000000000000000000000000000000000000000000088886000818110610e5c57fe5b9050602002016020810190610e719190615027565b89896001818110610e7e57fe5b9050602002016020810190610e939190615027565b612df0565b846129f7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610ec557339150610ee8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ee8573091505b610f26848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612edb915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610fcf57600080fd5b505af1158015610a9b573d6000803e3d6000fd5b60008086611099575060018484600081610ff957fe5b905060200201602081019061100e9190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110469190615a78565b60206040518083038186803b15801561105e57600080fd5b505afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611096919061580f565b96505b611124858560008181106110a957fe5b90506020020160208101906110be9190615027565b826110c957336110cb565b305b61111e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110fc57fe5b90506020020160208101906111119190615027565b8a8a6001818110610e7e57fe5b8a6129f7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561114b5733925061116e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561116e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061119e57fe5b90506020020160208101906111b39190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111eb9190615a78565b60206040518083038186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b919061580f565b905061127b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612edb915050565b6113508187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106112ad57fe5b90506020020160208101906112c29190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112fa9190615a78565b60206040518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a919061580f565b906131e0565b92508683101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611464608083018035906113d49060608601615027565b6113e460e0860160c08701615027565b60405180604001604052808760200160208101906114029190615027565b61141260608a0160408b016157dd565b61141f60208b018b615027565b604051602001611431939291906159e6565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff168152506127c9565b90508160a0013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b6114ce817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b6114d757600080fd5b50565b606083806114e661333c565b1115610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61155e8160006131f0565b6114a457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156115c0575060648211155b6115c957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561165257600080fd5b505afa158015611666573d6000803e3d6000fd5b505050506040513d602081101561167c57600080fd5b50519050848110156116ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b80156117c0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b505050506000612710611798858461334290919063ffffffff16565b8161179f57fe5b04905080156117b2576117b28382613366565b6117be85828403613366565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b505110156117be576117be868686868686610f2f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b50519050828110156119c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a5d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a3b57600080fd5b505af1158015611a4f573d6000803e3d6000fd5b50505050611a5d8282613366565b505050565b611a6d8160006131f0565b611a7657600080fd5b6114ce817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b60608167ffffffffffffffff81118015611ab957600080fd5b50604051908082528060200260200182016040528015611aed57816020015b6060815260200190600190039081611ad85790505b50905060005b82811015611bf35760008030868685818110611b0b57fe5b9050602002810190611b1d9190615e7d565b604051611b2b929190615a4c565b600060405180830381855af49150503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b509150915081611bd157604481511015611b8457600080fd5b60048101905080806020019051810190611b9e919061546f565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108689190615bb6565b80848481518110611bde57fe5b60209081029190910101525050600101611af3565b5092915050565b6114d7813361189c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c4d9190615a5c565b6000604051808303816000865af19150503d8060008114611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b50925090508061087157604482511015611ca857600080fd5b60048201915081806020019051810190611b9e919061546f565b600080600083604001511415611d9357600190506000611ce584600001516129b0565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611d3c903090600401615a78565b60206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8c919061580f565b6040850152505b600081611da05733611da2565b305b90505b6000611db48560000151612bd5565b9050611e0d856040015182611dcd578660200151611dcf565b305b60006040518060400160405280611de98b600001516134b4565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250612618565b60408601528015611e2d578451309250611e2690612bdd565b8552611e3a565b8460400151935050611e40565b50611da5565b8360600151831015611e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b5050919050565b611a5d833384846115af565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611f0657600080fd5b505afa158015611f1a573d6000803e3d6000fd5b505050506040513d6020811015611f3057600080fd5b505110156117be576117be868686868686612580565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f7a57611f7a3347613366565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611fda929190615a99565b60206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a919061580f565b1061203757506000612123565b612061837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b1561206e57506001612123565b612098837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b156120a557506002612123565b6120b08360006131f0565b6120b957600080fd5b6120e3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b156120f057506003612123565b61211a837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b1561036a575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561219257600080fd5b505afa1580156121a6573d6000803e3d6000fd5b505050506040513d60208110156121bc57600080fd5b505190508281101561222f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d4a57610d4a8483836134c3565b600082118015612251575060648211155b61225a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b505190508481101561236057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156117be5760006127106123758386613342565b8161237c57fe5b0490508015612390576123908784836134c3565b61239d87868385036134c3565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561240e57600080fd5b505af11580156117be573d6000803e3d6000fd5b61242d828233612129565b5050565b60008061243f868685613698565b915091508362ffffff16818303126117be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b6060610cab63219f5d1760e01b6040518060c00160405280856040013581526020016124bb866000016020810190610b909190615027565b81526020016124d6866020016020810190610b909190615027565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615cf0565b60008061253085846138ab565b915091508362ffffff16818303126117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b61242d82333084613b33565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610fcf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561264157339350612664565b73ffffffffffffffffffffffffffffffffffffffff841660021415612664573093505b600080600061267685600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806126a7868686613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126cd8f613d4e565b73ffffffffffffffffffffffffffffffffffffffff8e16156126ef578d612715565b8761270e5773fffd8963efd1fc6a506488495d951d5263988d25612715565b6401000276a45b8d6040516020016127269190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612755959493929190615ac0565b6040805180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a691906153d1565b91509150826127b557816127b7565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127f257339350612815565b73ffffffffffffffffffffffffffffffffffffffff841660021415612815573093505b600080600061282785600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612858858786613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561287e8f613d4e565b60000373ffffffffffffffffffffffffffffffffffffffff8e16156128a3578d6128c9565b876128c25773fffd8963efd1fc6a506488495d951d5263988d256128c9565b6401000276a45b8d6040516020016128da9190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612909959493929190615ac0565b6040805180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a91906153d1565b9150915060008361296f578183600003612975565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a166129a1578b81146129a157600080fd5b50505050505050949350505050565b600080806129be8482613d80565b92506129cb846014613e80565b90506129d8846017613d80565b91509193909250565b6000610f26856129f2868686613f70565b613fed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a525750804710155b15612b9b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abf57600080fd5b505af1158015612ad3573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b505050506040513d6020811015612b9357600080fd5b50610d4a9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612bc957612bc48483836134c3565b610d4a565b610d4a84848484613b33565b516042111590565b8051606090610cab9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161401d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c67903090600401615a78565b60206040518083038186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab919061580f565b6060600282511015612cc857600080fd5b815167ffffffffffffffff81118015612ce057600080fd5b50604051908082528060200260200182016040528015612d0a578160200160208202803683370190505b5090508281600183510381518110612d1e57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610d3557600080612d8b87866001860381518110612d6a57fe5b6020026020010151878681518110612d7e57fe5b6020026020010151614204565b91509150612dad848481518110612d9e57fe5b602002602001015183836142ec565b846001850381518110612dbc57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d4e565b6000806000612dff85856143c2565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a5d57600080848381518110612ef957fe5b6020026020010151858460010181518110612f1057fe5b6020026020010151915091506000612f2883836143c2565b5090506000612f587f00000000000000000000000000000000000000000000000000000000000000008585612df0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612fa657600080fd5b505afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde9190615716565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613040578284613043565b83835b91509150613084828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112fa9190615a78565b9550613091868383614467565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146130d5578260006130d9565b6000835b91509150600060028c51038a106130f0578a613131565b6131317f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061312457fe5b6020026020010151612df0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131999086908690869060248101615e42565b600060405180830381600087803b1580156131b357600080fd5b505af11580156131c7573d6000803e3d6000fd5b50506001909b019a50612ede9950505050505050505050565b8082038281111561212357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613247929190615b12565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132d09190615a5c565b6000604051808303816000865af19150503d806000811461330d576040519150601f19603f3d011682016040523d82523d6000602084013e613312565b606091505b5091509150818015610f26575080511580610f26575080806020019051810190610f2691906152c9565b60015490565b600082158061335d5750508181028183828161335a57fe5b04145b61212357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106133dd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016133a0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b5050905080611a5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610cab826000602b61401d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061359857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161355b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135fa576040519150601f19603f3d011682016040523d82523d6000602084013e6135ff565b606091505b509150915081801561362d57508051158061362d575080806020019051602081101561362a57600080fd5b50515b6117c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008083518551146136a957600080fd5b6000855167ffffffffffffffff811180156136c357600080fd5b506040519080825280602002602001820160405280156136fd57816020015b6136ea614e70565b8152602001906001900390816136e25790505b5090506000865167ffffffffffffffff8111801561371a57600080fd5b5060405190808252806020026020018201604052801561375457816020015b613741614e70565b8152602001906001900390816137395790505b50905060005b8751811015613884576000806137838a848151811061377557fe5b6020026020010151896138ab565b915091506137908261453d565b85848151811061379c57fe5b60200260200101516000019060020b908160020b815250506137bd8161453d565b8484815181106137c957fe5b60200260200101516000019060020b908160020b815250508883815181106137ed57fe5b602002602001015185848151811061380157fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061384357fe5b602002602001015184848151811061385757fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff909216910152505060010161375a565b5061388e8261454e565b60020b935061389c8161454e565b60020b92505050935093915050565b6000806000806138ba86614636565b90506000805b82811015613ad85760008060006138d68b6129b0565b92509250925060006138e9848484613d10565b905060008063ffffffff8d166139125761390283614661565b600291820b9350900b90506139b4565b61391c838e6148f9565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561396d57600080fd5b505afa158015613981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a59190615751565b50505060029290920b93505050505b600189038714156139f5578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16109950613a04565b6139fe8e612bdd565b9d508597505b6000871580613aa557508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a75578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613aa5565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613aba579b82019b9a81019a613ac5565b828d039c50818c039b505b5050600190950194506138c09350505050565b5082613b29577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613c1057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bd3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c72576040519150601f19603f3d011682016040523d82523d6000602084013e613c77565b606091505b5091509150818015613ca5575080511580613ca55750808060200190516020811015613ca257600080fd5b50515b6117be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d467f0000000000000000000000000000000000000000000000000000000000000000613d41868686613f70565b614d2a565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d7c57600080fd5b5090565b600081826014011015613df457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613ef457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f78614e87565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613fb0579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613ff98383614d2a565b90503373ffffffffffffffffffffffffffffffffffffffff82161461212357600080fd5b60608182601f01101561409157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561410257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561417457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561419357604051915060008252602082016040526141fb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141cc5780518352602092830192016141b4565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600080600061421385856143c2565b509050600080614224888888612df0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561426957600080fd5b505afa15801561427d573d6000803e3d6000fd5b505050506040513d606081101561429357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146142da5780826142dd565b81815b90999098509650505050505050565b600080841161435c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561436c5750600082115b61437557600080fd5b600061438d6103e86143878688613342565b90613342565b905060006143a16103e561438786896131e0565b90506143b860018284816143b157fe5b0490614e60565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143fe57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061443857828461443b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661446057600080fd5b9250929050565b60008084116144d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144e75750600082115b6144f057600080fd5b60006144fe856103e5613342565b9050600061450c8285613342565b9050600061452683614520886103e8613342565b90614e60565b905080828161453157fe5b04979650505050505050565b80600281900b8114610cae57600080fd5b6000806000805b84518110156145e35784818151811061456a57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061459457fe5b60200260200101516000015160020b02830192508481815181106145b457fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614555565b508082816145ed57fe5b059250600082128015614608575080828161460457fe5b0715155b15611e7e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156146ad57600080fd5b505afa1580156146c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e59190615751565b50939750919550935050600161ffff84161191506147319050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c14565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161476d9190615e2a565b60806040518083038186803b15801561478557600080fd5b505afa158015614799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147bd919061591c565b5050915091506147cb61333c565b63ffffffff168263ffffffff16146147e5578495506148f0565b60008361ffff1660018561ffff168761ffff1601038161480157fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148429190615e39565b60806040518083038186803b15801561485a57600080fd5b505afa15801561486e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614892919061591c565b93505092509250806148d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615bdd565b82860363ffffffff811683870360060b816148e757fe5b059a5050505050505b50505050915091565b60008063ffffffff831661496e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061499d57fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106149c657fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a61578181015183820152602001614a49565b505050509050019250505060006040518083038186803b158015614a8457600080fd5b505afa158015614a98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614adf57600080fd5b8101908080516040519392919084640100000000821115614aff57600080fd5b908301906020820185811115614b1457600080fd5b8251866020820283011164010000000082111715614b3157600080fd5b82525081516020918201928201910280838360005b83811015614b5e578181015183820152602001614b46565b5050505090500160405260200180516040519392919084640100000000821115614b8757600080fd5b908301906020820185811115614b9c57600080fd5b8251866020820283011164010000000082111715614bb957600080fd5b82525081516020918201928201910280838360005b83811015614be6578181015183820152602001614bce565b5050505090500160405250505091509150600082600081518110614c0657fe5b602002602001015183600181518110614c1b57fe5b6020026020010151039050600082600081518110614c3557fe5b602002602001015183600181518110614c4a57fe5b60200260200101510390508763ffffffff168260060b81614c6757fe5b05965060008260060b128015614c9157508763ffffffff168260060b81614c8a57fe5b0760060b15155b15614cbc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614d1a57fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d6c57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561212357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610cae81615f8e565b60008083601f840112614ec3578182fd5b50813567ffffffffffffffff811115614eda578182fd5b602083019150836020808302850101111561446057600080fd5b600082601f830112614f04578081fd5b81356020614f19614f1483615f04565b615ee0565b8281528181019085830183850287018401881015614f35578586fd5b855b85811015614f705781356fffffffffffffffffffffffffffffffff81168114614f5e578788fd5b84529284019290840190600101614f37565b5090979650505050505050565b80518015158114610cae57600080fd5b600082601f830112614f9d578081fd5b8135614fab614f1482615f22565b818152846020838601011115614fbf578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610cae57600080fd5b805161ffff81168114610cae57600080fd5b803562ffffff81168114610cae57600080fd5b8035610cae81615fbf565b600060208284031215615038578081fd5b813561504381615f8e565b9392505050565b6000806040838503121561505c578081fd5b823561506781615f8e565b946020939093013593505050565b600080600060608486031215615089578081fd5b833561509481615f8e565b92506020840135915060408401356150ab81615f8e565b809150509250925092565b600080600080600060a086880312156150cd578283fd5b85356150d881615f8e565b94506020860135935060408601356150ef81615f8e565b925060608601359150608086013561510681615f8e565b809150509295509295909350565b60008060008060808587031215615129578182fd5b843561513481615f8e565b93506020850135925060408501359150606085013561515281615f8e565b939692955090935050565b60008060008060008060c08789031215615175578384fd5b863561518081615f8e565b95506020870135945060408701359350606087013561519e81615fd1565b9598949750929560808101359460a0909101359350915050565b600080602083850312156151ca578182fd5b823567ffffffffffffffff8111156151e0578283fd5b6151ec85828601614eb2565b90969095509350505050565b6000806000806080858703121561520d578182fd5b843567ffffffffffffffff80821115615224578384fd5b818701915087601f830112615237578384fd5b81356020615247614f1483615f04565b82815281810190858301885b8581101561527c5761526a8e8684358b0101614f8d565b84529284019290840190600101615253565b50909950505088013592505080821115615294578384fd5b506152a187828801614ef4565b9350506152b060408601615009565b91506152be6060860161501c565b905092959194509250565b6000602082840312156152da578081fd5b61504382614f7d565b6000806000604084860312156152f7578081fd5b83359250602084013567ffffffffffffffff811115615314578182fd5b61532086828701614eb2565b9497909650939450505050565b60006020828403121561533e578081fd5b813567ffffffffffffffff811115615354578182fd5b613d4684828501614f8d565b600080600060608486031215615374578081fd5b833567ffffffffffffffff81111561538a578182fd5b61539686828701614f8d565b9350506153a560208501615009565b915060408401356150ab81615fbf565b6000602082840312156153c6578081fd5b813561504381615fb0565b600080604083850312156153e3578182fd5b505080516020909101519092909150565b60008060008060608587031215615409578182fd5b8435935060208501359250604085013567ffffffffffffffff8082111561542e578384fd5b818701915087601f830112615441578384fd5b81358181111561544f578485fd5b886020828501011115615460578485fd5b95989497505060200194505050565b600060208284031215615480578081fd5b815167ffffffffffffffff811115615496578182fd5b8201601f810184136154a6578182fd5b80516154b4614f1482615f22565b8181528560208385010111156154c8578384fd5b610f26826020830160208601615f62565b6000602082840312156154ea578081fd5b813567ffffffffffffffff80821115615501578283fd5b9083019060808286031215615514578283fd5b60405160808101818110838211171561552957fe5b60405282358281111561553a578485fd5b61554687828601614f8d565b8252506020830135915061555982615f8e565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615590578081fd5b60405160e0810181811067ffffffffffffffff821117156155ad57fe5b6040526155b983614ea7565b81526155c760208401614ea7565b60208201526155d860408401615009565b60408201526155e960608401614ea7565b60608201526080830135608082015260a083013560a082015261560e60c08401614ea7565b60c08201529392505050565b60006020828403121561562b578081fd5b813567ffffffffffffffff811115615641578182fd5b820160808185031215615043578182fd5b600060e08284031215610871578081fd5b600060a08284031215610871578081fd5b60006101008284031215610871578081fd5b600060208284031215615697578081fd5b813567ffffffffffffffff808211156156ae578283fd5b90830190604082860312156156c1578283fd5b6040516040810181811083821117156156d657fe5b6040528235828111156156e7578485fd5b6156f387828601614f8d565b8252506020830135925061570683615f8e565b6020810192909252509392505050565b60008060006060848603121561572a578081fd5b61573384614fd9565b925061574160208501614fd9565b915060408401516150ab81615fbf565b600080600080600080600060e0888a03121561576b578485fd5b875161577681615f8e565b602089015190975061578781615fb0565b955061579560408901614ff7565b94506157a360608901614ff7565b93506157b160808901614ff7565b925060a08801516157c181615fd1565b91506157cf60c08901614f7d565b905092959891949750929550565b6000602082840312156157ee578081fd5b61504382615009565b600060208284031215615808578081fd5b5035919050565b600060208284031215615820578081fd5b5051919050565b60008060408385031215615839578182fd5b82359150602083013561584b81615f8e565b809150509250929050565b6000806000806080858703121561586b578182fd5b84359350602085013561587d81615f8e565b925060408501359150606085013561515281615f8e565b6000806000606084860312156158a8578081fd5b833592506020840135915060408401356150ab81615f8e565b6000806000806000608086880312156158d8578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158fc578384fd5b61590888828901614eb2565b909450925050606086013561510681615f8e565b60008060008060808587031215615931578182fd5b845161593c81615fbf565b8094505060208501518060060b8114615953578283fd5b604086015190935061596481615f8e565b91506152be60608601614f7d565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526159a4816020860160208601615f62565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a6e818460208701615f62565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615b0760a083018461598c565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615ba9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b9785835161598c565b94509285019290850190600101615b5d565b5092979650505050505050565b600060208252615043602083018461598c565b6020810160058310615bd757fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d48828451615972565b6020830151615d5a6020840182615972565b506040830151615d6d60408401826159dd565b506060830151615d8060608401826159d6565b506080830151615d9360808401826159d6565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615dd182850182615972565b505061014092830151919092015290565b600060208252825160406020840152615dfe606084018261598c565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff84166040830152608060608301526143b8608083018461598c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615eb1578283fd5b83018035915067ffffffffffffffff821115615ecb578283fd5b60200191503681900382131561446057600080fd5b60405181810167ffffffffffffffff81118282101715615efc57fe5b604052919050565b600067ffffffffffffffff821115615f1857fe5b5060209081020190565b600067ffffffffffffffff821115615f3657fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f7d578181015183820152602001615f65565b83811115610d4a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146114d757600080fd5b8060020b81146114d757600080fd5b63ffffffff811681146114d757600080fd5b60ff811681146114d757600080fdfea164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
