Contract 0xf57fcab4e5b76fc49917f6ac11eac27e222ca111 5

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6fa7794dcb151b7f51b168b8fa1bf87226cc12ba287a18b1d179e141d6a5737bTransfer130945072021-12-01 4:16:232 days 12 hrs ago0x02199362c44513a95658c4db398a894a0d058634 IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0x1c0fd65853c6a98774b086e6f13508562a1871e4b95d3923800ee7005431836dTransfer130835642021-11-30 18:48:522 days 22 hrs ago0x4857b80c755502a9f1305f31145a51894ffab2bf IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0xfcaf01a358b2d3b33d3c2a30180ea0bbaf697a47df743a858959d430c9663ec0Approve130591452021-11-29 20:57:353 days 20 hrs ago0x88a16ec53bd29839b643dd5f061afeae6980443c IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0xbab95a1f0bebb8b7b73d96d1976d62f83817e2482e27db3517f8dbbf35bb5c10Approve130523712021-11-29 14:49:434 days 2 hrs ago0xa1a592cdfb8623360524d2da5b4ddf6a63426917 IN  Project DogeX: $DOGEX Token0 BNB0.000072885
0xa4f712e084a0bcddd5964928d77d4643f5afdb2fd46fda7a45aa00487de7450cApprove130523702021-11-29 14:49:404 days 2 hrs ago0xa1a592cdfb8623360524d2da5b4ddf6a63426917 IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0xa44bda486a95e79a8223c16f2db57475633c6b78c5345508d2836068e581cd75Transfer130251852021-11-28 13:51:235 days 3 hrs ago0xd12befc795090aa194923733d93a7829335c1897 IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0xcb1aae0e25d1269b12e315e3d57177a7653da7c880ad610c6545a381d0d0f51cApprove130250592021-11-28 13:44:315 days 3 hrs ago0xd12befc795090aa194923733d93a7829335c1897 IN  Project DogeX: $DOGEX Token0 BNB0.000222745
0xc7915bad14ee1e5c45c4531723906c3b299b727c628aef7d2c95419c14c3d0b8Transfer129911262021-11-27 7:29:446 days 9 hrs ago0x1a00602d8327939521c039ca767ba670356d7ced IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0x9c6c7ed21d2caa65110a54891d4a2eb592d252e731c7fa063e5a056e3950e5c9Transfer129760252021-11-26 17:54:246 days 23 hrs ago0x36992d55687466891b61e542d3d9157922fa6830 IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0x6b2bb20701cb01ecdf6a6a66dde28eaf631538db3dd968a53208d46f167aaa98Approve129599132021-11-26 2:43:557 days 14 hrs ago0x93f2f88f6f4a9075321bc4bb982f650a42cc231b IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0x8f25adf4ce334d47ebfb7dbdb3384e335dbf255d82c58719b2592dc5179e3294Approve129509532021-11-25 18:20:557 days 22 hrs ago0x2a2b7b013e43909965295f978a5f165be663be35 IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0x26ba8c2dc6eb66676729f81c6af3bb35dd8e9388e484aa69c36134dc683cd035Approve129204152021-11-24 15:05:239 days 1 hr ago0x64ac4582ea48b5fa02dacb1fce3c61beacfe52f1 IN  Project DogeX: $DOGEX Token0 BNB0.000072885
0x9c5b9d857e53c4dff581e4e8c17c8257ec7e6a7c4e3c3482cbb0be9937e17b51Approve129151552021-11-24 10:32:269 days 6 hrs ago0x4c9561c81ba5b8f056e088e3ae190722a1c3a6d2 IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0x629b791933d3bea59cc71572e836396c38e610e69e2fe6fcc15f38e7a8de7c80Approve129039482021-11-24 0:47:009 days 16 hrs ago0x9513a9cc3c70483e507e39a0ec362516ee39ac25 IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0x6d909e35b9bb97d5c508c70f7d0a0abda4b454a8edfc4f629436da6dc56589fbApprove129020832021-11-23 23:10:579 days 17 hrs ago0x0145feb88014154f664bffe15145f36f6416a875 IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0xf8df6b57928c38a8dee92a5f853be1e1c1de1399e8c709807ee0718075198efcTransfer128993512021-11-23 20:51:109 days 20 hrs ago0x5c0f7d7349dcdcd6ccb1ef96d2d2268cf1b5568f IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0xc89f0649b22eeac89e2802d27f2a77c6a1eb662e07ec725f03813b0c7357be24Approve128717772021-11-22 20:56:4810 days 20 hrs ago0x3c79b4424206792c6cc3cc63ecbc2b2d7c4f7294 IN  Project DogeX: $DOGEX Token0 BNB0.000222745
0x5487dbd3e64813624bcc1cf83753eb6abcf13677d5fbc226eaa4a52197fa3542Transfer128543412021-11-22 5:54:0411 days 11 hrs ago0x863edd72a93e0fe44e0094668daddc45f8832e5f IN  Project DogeX: $DOGEX Token0 BNB0.000754944
0xc84808a5a2243f2b377fb9e8b052a9d1c6c79c2a00374add78539151f609ff0eTransfer128521312021-11-22 4:02:3611 days 12 hrs ago0x061b12b514a6ee66314a340e73a715fd3de016a8 IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0xfbf166f0de1ea28442adccd3b58642bba0d04670b3d49862b700a4490435cab3Approve128362362021-11-21 14:29:3912 days 2 hrs ago0x773e462dae9bbe7118dfed39737afa9b8878a5db IN  Project DogeX: $DOGEX Token0 BNB0.000078091965
0xbb3f3de0e6d5f93ab1981dd57cfa9d4d1d8c0973c7aba62aade918e1350b7882Transfer128197662021-11-21 0:28:3512 days 16 hrs ago0xc2cf25eb5609b36f630c68166b68aa9d5cc51dc4 IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0x9b692e850e68856410af0e6d887616b4840f41f4977988c5cc8cac451a591912Approve128179242021-11-20 22:56:0012 days 18 hrs ago0xbb5f6ad4fee07f3a75d3ae2f0330940c111d6f60 IN  Project DogeX: $DOGEX Token0 BNB0.000072915
0x51996f27408a9ba1a7f8ebab5e9c703cd5f38f2d99df49e43bed5f73512f74cdTransfer128167252021-11-20 21:55:5912 days 19 hrs ago0xea4d41ee2c324f198bf91119ab310608ae667725 IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0xabc9a03b4020e9407ffac71e51c3fe77354e2125abe34b09a9c30e250fd7293eTransfer128156532021-11-20 21:02:2112 days 19 hrs ago0x5060d7e132a454eeb12aa0dd1cf7167686d2fdce IN  Project DogeX: $DOGEX Token0 BNB0.00062912
0x43f2420e3e1a75e0418c2f339286510175837375a32cc75c688526792a7f2c79Transfer128154632021-11-20 20:52:5012 days 20 hrs ago0x8b70a6b6e72e78e5eaeb0b1336a6c123e827cada IN  Project DogeX: $DOGEX Token0.015574015 BNB0.00021055
[ Download CSV Export 

OVERVIEW

DogeX utilizes trading mechanism that ensures trade chart is always a higher low with extra features such as a Fuel Stop, and Golden Hour. DogeX innovates with a Buyback function.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb8c7231199b1a825c1a33d4985fc484c1a2deaafb589efe6941a47c50e2729e7116086692021-10-09 0:41:4155 days 16 hrs ago Project DogeX: $DOGEX Token0xe01f2d85a7f191acfbd4807c69cfdce5034f8d280.014624670887345763 BNB
0xb8c7231199b1a825c1a33d4985fc484c1a2deaafb589efe6941a47c50e2729e7116086692021-10-09 0:41:4155 days 16 hrs ago Project DogeX: $DOGEX Token0x4765a8f2402e4769adfa7b3e54bb30f5dd7702fd0.087748025324074578 BNB
0xb8c7231199b1a825c1a33d4985fc484c1a2deaafb589efe6941a47c50e2729e7116086692021-10-09 0:41:4155 days 16 hrs ago Project DogeX: $DOGEX Token0xa5347334af09bbc6c2456ab435f54ef8189fa7090.190120721535494919 BNB
0xb8c7231199b1a825c1a33d4985fc484c1a2deaafb589efe6941a47c50e2729e7116086692021-10-09 0:41:4155 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.292493417746915259 BNB
0xb8c7231199b1a825c1a33d4985fc484c1a2deaafb589efe6941a47c50e2729e7116086692021-10-09 0:41:4155 days 16 hrs ago Project DogeX: $DOGEX Token PancakeSwap: Router v20.073139477918605069 BNB
0xb8c7231199b1a825c1a33d4985fc484c1a2deaafb589efe6941a47c50e2729e7116086692021-10-09 0:41:4155 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.073139477918605069 BNB
0x9f8b3169d1ad44c276875be5f38ea64e8ef26dfdb735e40411e72537a5e9396a116086562021-10-09 0:41:0255 days 16 hrs ago Project DogeX: $DOGEX Token0xe01f2d85a7f191acfbd4807c69cfdce5034f8d280.014624670887345763 BNB
0x9f8b3169d1ad44c276875be5f38ea64e8ef26dfdb735e40411e72537a5e9396a116086562021-10-09 0:41:0255 days 16 hrs ago Project DogeX: $DOGEX Token0x4765a8f2402e4769adfa7b3e54bb30f5dd7702fd0.087748025324074578 BNB
0x9f8b3169d1ad44c276875be5f38ea64e8ef26dfdb735e40411e72537a5e9396a116086562021-10-09 0:41:0255 days 16 hrs ago Project DogeX: $DOGEX Token0xa5347334af09bbc6c2456ab435f54ef8189fa7090.190120721535494919 BNB
0x9f8b3169d1ad44c276875be5f38ea64e8ef26dfdb735e40411e72537a5e9396a116086562021-10-09 0:41:0255 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.292493417746915259 BNB
0x9f8b3169d1ad44c276875be5f38ea64e8ef26dfdb735e40411e72537a5e9396a116086562021-10-09 0:41:0255 days 16 hrs ago Project DogeX: $DOGEX Token PancakeSwap: Router v20.073139477918605069 BNB
0x9f8b3169d1ad44c276875be5f38ea64e8ef26dfdb735e40411e72537a5e9396a116086562021-10-09 0:41:0255 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.073139477918605069 BNB
0x6a0d23504bc7b73962623df3fb86fb181938c2f28d4465c52821c9d80663c629116086482021-10-09 0:40:3855 days 16 hrs ago Project DogeX: $DOGEX Token0xe01f2d85a7f191acfbd4807c69cfdce5034f8d280.002410304435682385 BNB
0x6a0d23504bc7b73962623df3fb86fb181938c2f28d4465c52821c9d80663c629116086482021-10-09 0:40:3855 days 16 hrs ago Project DogeX: $DOGEX Token0x4765a8f2402e4769adfa7b3e54bb30f5dd7702fd0.014461826614094312 BNB
0x6a0d23504bc7b73962623df3fb86fb181938c2f28d4465c52821c9d80663c629116086482021-10-09 0:40:3855 days 16 hrs ago Project DogeX: $DOGEX Token0xa5347334af09bbc6c2456ab435f54ef8189fa7090.031333957663871009 BNB
0x6a0d23504bc7b73962623df3fb86fb181938c2f28d4465c52821c9d80663c629116086482021-10-09 0:40:3855 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.048206088713647707 BNB
0x6a0d23504bc7b73962623df3fb86fb181938c2f28d4465c52821c9d80663c629116086482021-10-09 0:40:3855 days 16 hrs ago Project DogeX: $DOGEX Token PancakeSwap: Router v20.012051959899698895 BNB
0x6a0d23504bc7b73962623df3fb86fb181938c2f28d4465c52821c9d80663c629116086482021-10-09 0:40:3855 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.012051959899698895 BNB
0x8493f5cf735941ca10a72f4412bb05c27477cfddbfaea9427a9e16f4967076c1116086452021-10-09 0:40:2955 days 16 hrs ago Project DogeX: $DOGEX Token0xe01f2d85a7f191acfbd4807c69cfdce5034f8d280.011294845078079371 BNB
0x8493f5cf735941ca10a72f4412bb05c27477cfddbfaea9427a9e16f4967076c1116086452021-10-09 0:40:2955 days 16 hrs ago Project DogeX: $DOGEX Token0x4765a8f2402e4769adfa7b3e54bb30f5dd7702fd0.067769070468476226 BNB
0x8493f5cf735941ca10a72f4412bb05c27477cfddbfaea9427a9e16f4967076c1116086452021-10-09 0:40:2955 days 16 hrs ago Project DogeX: $DOGEX Token0xa5347334af09bbc6c2456ab435f54ef8189fa7090.146832986015031823 BNB
0x8493f5cf735941ca10a72f4412bb05c27477cfddbfaea9427a9e16f4967076c1116086452021-10-09 0:40:2955 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.225896901561587418 BNB
0x8493f5cf735941ca10a72f4412bb05c27477cfddbfaea9427a9e16f4967076c1116086452021-10-09 0:40:2955 days 16 hrs ago Project DogeX: $DOGEX Token PancakeSwap: Router v20.056483836936999971 BNB
0x8493f5cf735941ca10a72f4412bb05c27477cfddbfaea9427a9e16f4967076c1116086452021-10-09 0:40:2955 days 16 hrs ago PancakeSwap: Router v2 Project DogeX: $DOGEX Token0.056483836936999971 BNB
0x85451fd6c7799311e5fa2ec16a8ce4f47e9095849da7ecaacdd12835031378b6116086422021-10-09 0:40:2055 days 16 hrs ago Project DogeX: $DOGEX Token0xe01f2d85a7f191acfbd4807c69cfdce5034f8d280.014640642911695575 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DOGEX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-09-22
*/

/*
                                 ,╓▄▄#▒▒▒▒▒▒▒▒▒▄▄╓,
                            ,▄▒▓▀╙Γ              ^╙▀█▒▄╖
                         ▄▓▀╙                          ╙▀▓▄
                      ╔▓▀Γ      µ═┘ΓΓΓ¬       ¬Γ""≈▄      ^▀▓▄
                    ▄▓▀     ╓┴Γ    ,╓«═≈ⁿ──*≈═w╖,    └²╦     ╙▓▒
                  ▄▓▀    ╓┘¬  a┴▐▄æMΦΓΓΓΓΓΓΓΓΓΓτ¥w▄Σ*w,  "▄    ╙▓▄
                 ▓▀    ╓▀ ,ª▄#Φ▀\         ''       ▄▓▀W▄*╥ ╙▄    ▀▓⌐
               ╒▓▀    # ▄▓#▓▀     `, ,µ▄▄▄▄▄▄▄µ '▄▀░░^ ░Γ▓▓¼ ▀    ╙▓▄
              ╒▓Γ    ▓▄▓█Γ']      ░⌠⌡Γ░░░░░░░░░░⌡░░    ]░▓ ▀▓▄▀    └▓▄
              ▓▌    ╫▓▓Γ ' ] ,  ░░░░░░░░░░░░░░░░░░░░░≥ ░░▓'  ▀▓▓    ╙▓⌐
             ╫▓   Æ^▓▓      ▌░░░░░░░░░░░░░░░░░░░░░░░░░░░j▓    ▀▓"W   ▀▓
             ▓Γ  ▌ j▓      ╓▌░░░░░░░░░░░░░░░░░░░░░░░░░░░Γ▀⌐  ' ▓Γ ╟   ▓⌐
            ▐▓   ╟ ▐▌    '▄▀░░░░░░░ `░░░░░░░░░░"`"░░░░░░░ ╚    ^▌ ╠   ▓▌
            ▐▓   ▐ ▐∩    ▓▀░░░░░░░░░;≤░░░░░░░░░;≤░░░░░░░░░,╠∩  j▌ ▌   ▓▌
            ▐▓   j⌐ ▓   ▐▌░░░░░░░░╫▓,▓░░░░░░░░¼▓▓▀░░░░░░░░░▐▌  ╫⌐ ▌   ▓▌
             ▓∩   Θ ▓▌  ╫▌░     ░░⌠▀▀░░░░░"░░░░░░⌡░░░    └░▐▌ ]▓░▄    ▓Γ
             ▓▌     ^▓▄  ▓µ░            ▓▓▓▓▓∩           ;╓▓'.▓Γ     ╟▓
             └▓µ      ▓▄, ▀▄░         ╓,,▓▓▓╓,▄        .░▄▀ ▄▓Γ      ▓Γ
              ▐▓       ▀▓▀█▓▓▄▄        *.█╫▒Γ*       ,▄▓▓█▀▓▓`      ▓▌
               ▀▓       '▀▄,  ^▀▀▀▀▀▀██████████▀▀▀▀▀▀Γ' ,▄▀Γ       ▓▀
                ╙▓▄      ÆΓ¬▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀Γ ¼      ╓▓▀
                  ▀▓     ░▄▌ ╙▄ ▀ÆÆæææææææææææææææÆ╝^▄▀,▓▄'∩    ╣▓`
                   "▓▒  ▄▀▀▓▓µ ▀           ~.       ╩ ▄▓▓▀▀▌  #▓Γ
                     ^▀▓▄   ▀▓▄ ▀   ⌐Γ ⌐Γ~⌐── ,#▒, ▌ ╣▓▀   ▄▓▀Γ
                        ╙▀▒▄ ╙▓▌ ▀                ▓ ╣▓▌ ╓▒▓▀
                           "▀▓▓▓▄ ▌              ▐,▐▓▓▓▀Γ
                                ╙▀▀▀█▒▒@▄▄▄▄@▒▒█▀▀▀^

                                                `"ⁿ=≥╦,
                                                       `"╚╬╦╦╖,
                                                             "╙╬╬▒╦╖             ,,,,,,
         ╓╦╦╦╦╓╓,       ╓╦╦╦╦╦╦╦╦╓     ,╓╦╓╓╓╦╦╓,     ╦╦╦╦╦╦╦╦╕   ╙╝╬╬▒╦╖     ╓▒▓╬╬╬▓╩
                 ╙▒     ╬⌐       ╬⌐    ╬Γ       ▀                     ╙▒╬╬▓▒╖"▀▒╬▓╩
                  ╫▌    ╬⌐       ╬⌐    ╬Γ   ╦╦╦╦╦     ######            ,"▀▓▓▓▓▄,
                 ,▓Γ    ╬⌐       ╬⌐    ╬Γ       ╬⌐                   ╓▒▓╬▒╦ ╙▀▓▓▓▓▒,
         ╚╝╝╝╝╝╝╨╙      ╙▀╝╝╝╝╝╝╝▀     ╙▀╝╝╝╝╝╝╝╜     ╝╝╝╝╝╝╝╝╩   ╔▒╬╬╬╬▓╩     ▀▓▓▓▓▓▄
                                                                ╝▀▀▀▀▀╜          ╙▀▀▀▀▀Φ

Buy tax: 14%
5% Buyback
2.5% Marketing
3% LP
2% Reflections
1% Development team
0.5% Project Maintenance

Sell Tax: 17%
6.5% Buyback
3% Marketing
4% LP
2% Reflections
1% Development team
0.5% Project Maintenance

☀️Golden Hour & Below Floor Taxes

Hour 1 (& below floor): 40%
20.5% Buyback
7% marketing
5% LP
4% Reflections
3% Development team
0.5% Project Maintenance

Hour 2: 24%
12.5% Buyback
5% Marketing
3% LP
2% Reflections
1% Development team
0.5% Project Maintenance

Smart contract developed by Alex $Saint
Reach on telegram: @Alex_Saint_Dev
*/

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

interface AggregatorV3Interface {

  function decimals()
    external
    view
    returns (
      uint8
    );

  function description()
    external
    view
    returns (
      string memory
    );

  function version()
    external
    view
    returns (
      uint256
    );

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(
    uint80 _roundId
  )
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

abstract contract IERC20Extented is IERC20 {
    function decimals() external view virtual returns (uint8);
    function name() external view virtual returns (string memory);
    function symbol() external view virtual returns (string memory);
}

contract DOGEX is Context, IERC20, IERC20Extented, Ownable {
    using SafeMath for uint256;
    string private constant _name = "Project DogeX";
    string private constant _symbol = "$DOGEX";
    uint8 private constant _decimals = 9;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => uint256) private sellcooldown;
    mapping(address => uint256) private _sellTotal;
    mapping(address => uint256) private _firstSell;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isContractWallet; // exclude contract wallets maxWalletAmount
    mapping(address => bool) private _isExchange; // used for whitelisting exchange hot wallets
    mapping(address => bool) private _isBridge; //used for whitelisting bridges
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _priceImpact = 2;
    uint256 private previousClose;
    uint256 private _firstBlock;
    uint256 private _botBlocks;
    uint256 public _maxWalletAmount;
    uint256 private _maxSellAmountBNB = 20000000000000000000; // 20 BNB
    uint256 private _minBuyBNB = 10000000000000000; // 0.01 BNB
    uint256 private _minSellBNB = 10000000000000000; // 0.01 BNB
    uint256 private _taxFreeBlocks = 3600; // 1 hour
    uint256 private _cooldownBlocks = 3600; // 1 hour
    uint256 private _taxFreeWindowEnd; // block.timestamp + _taxFreeBlocks
    uint256 public _goldenHourStartBlock = 0;
    bool public _goldenHourStarted = false;
    uint256 private _slideEndBlock = 0;
    bool public _recovered = true;
    uint256 private _threshold = 10;
    uint256 private _floorPercent;
    uint256 private _ath = 0;
    
    uint256 public _floorBuybackFee = 21;
    uint256 public _floorMarketingFee = 7;
    uint256 public _floorLiquidityFee = 5;
    uint256 public _floorReflectionFee = 4;
    uint256 public _floorDevFee = 3;

    uint256 public _slideBuybackFee = 13;
    uint256 public _slideMarketingFee = 5;
    uint256 public _slideLiquidityFee = 3;
    uint256 public _slideReflectionFee = 2;
    uint256 public _slideDevFee = 1;

    //  buy fees
    uint256 public _buyBuybackFee = 5;
    uint256 private _previousBuyBuybackFee = _buyBuybackFee;
    uint256 public _buyMarketingFee = 3;
    uint256 private _previousBuyMarketingFee = _buyMarketingFee;
    uint256 public _buyReflectionFee = 2;
    uint256 private _previousBuyReflectionFee = _buyReflectionFee;
    uint256 public _buyLiquidityFee = 3;
    uint256 private _previousBuyLiquidityFee = _buyLiquidityFee;
    uint256 public _buyDevFee = 1;
    uint256 private _previousBuyDevFee = _buyDevFee;
    
    // sell fees
    uint256 public _sellBuybackFee = 7;
    uint256 private _previousSellBuybackFee = _sellBuybackFee;
    uint256 public _sellMarketingFee = 3;
    uint256 private _previousSellMarketingFee = _sellMarketingFee;
    uint256 public _sellReflectionFee = 2;
    uint256 private _previousSellReflectionFee = _sellReflectionFee;
    uint256 public _sellLiquidityFee = 4;
    uint256 private _previousSellLiquidityFee = _sellLiquidityFee;
    uint256 public _sellDevFee = 1;
    uint256 private _previousSellDevFee = _sellDevFee;
  
    struct DynamicTax {
        uint256 buyBuybackFee;
        uint256 buyMarketingFee;
        uint256 buyReflectionFee;
        uint256 buyLiquidityFee;
        uint256 buyDevFee;
        
        uint256 sellBuybackFee;
        uint256 sellMarketingFee;
        uint256 sellReflectionFee;
        uint256 sellLiquidityFee;
        uint256 sellDevFee;
    }
    
    uint256 constant private _projectMaintainencePercent = 5;
    uint256 private _devPercent = 10;
    uint256 private _marketingPercent = 25;
    uint256 private _buybackPercent = 60;

    struct BuyBreakdown {
        uint256 tTransferAmount;
        uint256 tBuyback;
        uint256 tMarketing;
        uint256 tReflection;
        uint256 tLiquidity;
        uint256 tDev;
    }

    struct SellBreakdown {
        uint256 tTransferAmount;
        uint256 tBuyback;
        uint256 tMarketing;
        uint256 tReflection;
        uint256 tLiquidity;
        uint256 tDev;
    }
    
    struct FinalFees {
        uint256 tTransferAmount;
        uint256 tBuyback;
        uint256 tMarketing;
        uint256 tReflection;
        uint256 tLiquidity;
        uint256 tDev;
        uint256 rReflection;
        uint256 rTransferAmount;
        uint256 rAmount;
    }

    mapping(address => bool) private bots;
    address payable private _marketingAddress = payable(0xA5347334AF09Bbc6C2456AB435F54ef8189FA709);
    address payable private _buybackAddress = payable(0x64Ce548B7fe68E7e23892F1f8Ff600595D74484e);
    address payable constant private _projectMaintainence = payable(0xe01F2d85a7f191aCfBd4807c69CfdcE5034f8D28);
    address payable private _developmentAddress = payable(0x4765a8F2402E4769Adfa7B3E54bb30f5dd7702FD);
    address payable constant private _burnAddress = payable(0x000000000000000000000000000000000000dEaD);
    address private presaleRouter;
    address private presaleAddress;
    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private _maxTxAmount;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private presale = true;
    bool private pairSwapped = false;
    bool private _sellCoolDownEnabled = true;
    bool private _dailyMaxEnabled = true;

    event EndedPresale(bool presale);
    event UpdatedAllowableDip(uint256 hundredMinusDipPercent);
    event UpdatedHighLowWindows(uint256 GTblock, uint256 LTblock, uint256 blockWindow);
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    event SellOnlyUpdated(bool sellOnly);
    event PercentsUpdated(uint256 _marketingPercent, uint256 _buybackPercent, uint256 _devPercent);
    event FeesUpdated(uint256 _buyBuybackFee, uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _buyReflectionFee, uint256 _buyDevFee, uint256 _sellBuyBackFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellReflectionFee, uint256 _sellDevFee);
    event PriceImpactUpdated(uint256 _priceImpact);

    AggregatorV3Interface internal priceFeed;
    address public _oraclePriceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;//rinkeby 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;// bnb testnet 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;// bnb pricefeed 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
    bool private priceOracleEnabled = true;
    int private manualETHvalue = 3000 * 10**8;

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);//ropstenn 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //bsc test 0xD99D1c33F9fC3444f8101754aBC46c52416550D1);//bsc main net 0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router),type(uint256).max);

        priceFeed = AggregatorV3Interface(_oraclePriceFeed);

        previousClose = 0;

        _maxTxAmount = _tTotal; // start off transaction limit at 100% of total supply
        _maxWalletAmount = _tTotal.div(1); // 100%

        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_buybackAddress] = true;
        _isContractWallet[_buybackAddress] = true;
        _isContractWallet[_marketingAddress] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() override external pure returns (string memory) {
        return _name;
    }

    function symbol() override external pure returns (string memory) {
        return _symbol;
    }

    function decimals() override external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function tokenFromReflection(uint256 rAmount) private view returns (uint256) {
        require(rAmount <= _rTotal,"Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_buyMarketingFee == 0 && _buyBuybackFee == 0 && _buyReflectionFee == 0 && _buyLiquidityFee == 0 && _buyDevFee == 0 && _sellMarketingFee == 0 && _sellBuybackFee == 0 && _sellReflectionFee == 0 && _sellLiquidityFee == 0 && _sellDevFee == 0) return;
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyBuybackFee = _buyBuybackFee;
        _previousBuyReflectionFee = _buyReflectionFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _previousBuyDevFee = _buyDevFee;

        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellBuybackFee = _sellBuybackFee;
        _previousSellReflectionFee = _sellReflectionFee;
        _previousSellLiquidityFee = _sellLiquidityFee;
        _previousSellDevFee = _sellDevFee;

        _buyMarketingFee = 0;
        _buyBuybackFee = 0;
        _buyReflectionFee = 0;
        _buyLiquidityFee = 0;
        _buyDevFee = 0;

        _sellMarketingFee = 0;
        _sellBuybackFee = 0;
        _sellReflectionFee = 0;
        _sellLiquidityFee = 0;
        _sellDevFee = 0;
    }

    function setBotFee() private {
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyBuybackFee = _buyBuybackFee;
        _previousBuyReflectionFee = _buyReflectionFee;
        _previousBuyDevFee = _buyDevFee;

        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellBuybackFee = _sellBuybackFee;
        _previousSellReflectionFee = _sellReflectionFee;
        _previousSellDevFee = _sellDevFee;

        _buyMarketingFee = 45;
        _buyBuybackFee = 45;
        _buyReflectionFee = 0;
        _buyDevFee = 0;

        _sellMarketingFee = 45;
        _sellBuybackFee = 45;
        _sellReflectionFee = 0;
        _sellDevFee = 0;
    }
    
    function restoreAllFee() private {
        _buyMarketingFee = _previousBuyMarketingFee;
        _buyBuybackFee = _previousBuyBuybackFee;
        _buyReflectionFee = _previousBuyReflectionFee;
        _buyLiquidityFee = _previousBuyLiquidityFee;
        _buyDevFee = _previousBuyDevFee;

        _sellMarketingFee = _previousSellMarketingFee;
        _sellBuybackFee = _previousSellBuybackFee;
        _sellReflectionFee = _previousSellReflectionFee;
        _sellLiquidityFee = _previousSellLiquidityFee;
        _sellDevFee = _previousSellDevFee;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * Returns the latest price
     */
    function getLatestPrice() external view returns (uint80, int, uint, uint,  uint80) {
        (
            uint80 roundID,
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();

        return (roundID, price, startedAt, timeStamp,  answeredInRound);
    }

    // calculate price based on pair reserves
    function getTokenPrice() external view returns(uint256) {
        IERC20Extented token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//dogex
        IERC20Extented token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//bnb
        (uint112 Res0, uint112 Res1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        if(pairSwapped) {
            token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//dogex
            token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//bnb
            (Res1, Res0,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        }
        int latestETHprice = manualETHvalue; // manualETHvalue used if oracle crashes
        if(priceOracleEnabled) {
            (,latestETHprice,,,) = this.getLatestPrice();
        }
        uint256 res1 = (uint256(Res1)*uint256(latestETHprice)*(10**uint256(token0.decimals())))/uint256(token1.decimals());

        return(res1/uint256(Res0)); // return amount of token1 needed to buy token0
    }

    // calculate price based on pair reserves
    function getTokenPriceBNB(uint256 amount) external view returns(uint256) {
        IERC20Extented token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//dogex
        IERC20Extented token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//bnb
        (uint112 Res0, uint112 Res1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        if(pairSwapped) {
            token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//dogex
            token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//bnb
            (Res1, Res0,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        }

        uint res1 = Res1*(10**token0.decimals());
        return((amount*res1)/(Res0*(10**token0.decimals()))); // return amount of token1 needed to buy token0
    }
    
    function updateFee() private returns(DynamicTax memory) {
        
        DynamicTax memory currentTax;
        
        currentTax.buyBuybackFee = _buyBuybackFee;
        currentTax.buyMarketingFee = _buyMarketingFee;
        currentTax.buyLiquidityFee = _buyLiquidityFee;
        currentTax.buyReflectionFee = _buyReflectionFee;
        currentTax.buyDevFee = _buyDevFee;
        
        currentTax.sellBuybackFee = _sellBuybackFee;
        currentTax.sellMarketingFee = _sellMarketingFee;
        currentTax.sellLiquidityFee = _sellLiquidityFee;
        currentTax.sellReflectionFee = _sellReflectionFee;
        currentTax.sellDevFee = _sellDevFee;
        
        uint256 currentPrice = this.getTokenPrice();

        if(block.timestamp >= _goldenHourStartBlock && block.timestamp <= _taxFreeWindowEnd) {
            currentTax.buyBuybackFee = 0;
            currentTax.buyMarketingFee = 0;
            currentTax.buyLiquidityFee = 0;
            currentTax.buyReflectionFee = 0;
            currentTax.buyDevFee = 0;
            
            currentTax.sellBuybackFee = _floorBuybackFee;
            currentTax.sellMarketingFee = _floorMarketingFee;
            currentTax.sellLiquidityFee = _floorLiquidityFee;
            currentTax.sellReflectionFee = _floorReflectionFee;
            currentTax.sellDevFee = _floorDevFee;
        }
        else if (block.timestamp > _taxFreeWindowEnd && block.timestamp <= _slideEndBlock) {
            currentTax.buyBuybackFee = _buyBuybackFee;
            currentTax.buyMarketingFee = _buyMarketingFee;
            currentTax.buyLiquidityFee = _buyLiquidityFee;
            currentTax.buyReflectionFee = _buyReflectionFee;
            currentTax.buyDevFee = _buyDevFee;
            
            currentTax.sellBuybackFee = _slideBuybackFee;
            currentTax.sellMarketingFee = _slideMarketingFee;
            currentTax.sellLiquidityFee = _slideLiquidityFee;
            currentTax.sellReflectionFee = _slideReflectionFee;
            currentTax.sellDevFee = _slideDevFee;
        }
        if (block.timestamp > _taxFreeWindowEnd && _goldenHourStarted) {
            _goldenHourStarted = false;
        }
        if (currentPrice > previousClose.mul(uint256(100).add(_threshold)).div(100) && !_recovered && !_goldenHourStarted) {
            _recovered = true;
        }
        if (currentPrice <= previousClose) {
            currentTax.buyBuybackFee = _buyBuybackFee;
            currentTax.buyMarketingFee = _buyMarketingFee;
            currentTax.buyLiquidityFee = _buyLiquidityFee;
            currentTax.buyReflectionFee = _buyReflectionFee;
            currentTax.buyDevFee = _buyDevFee;
        
            currentTax.sellBuybackFee = _floorBuybackFee;
            currentTax.sellMarketingFee = _floorMarketingFee;
            currentTax.sellLiquidityFee = _floorLiquidityFee;
            currentTax.sellReflectionFee = _floorReflectionFee;
            currentTax.sellDevFee = _floorDevFee;
            
            if(block.timestamp >= _goldenHourStartBlock && block.timestamp <= _taxFreeWindowEnd) {
                currentTax.buyBuybackFee = 0;
                currentTax.buyMarketingFee = 0;
                currentTax.buyLiquidityFee = 0;
                currentTax.buyReflectionFee = 0;
                currentTax.buyDevFee = 0;
                
                currentTax.sellBuybackFee = _floorBuybackFee;
                currentTax.sellMarketingFee = _floorMarketingFee;
                currentTax.sellLiquidityFee = _floorLiquidityFee;
                currentTax.sellReflectionFee = _floorReflectionFee;
                currentTax.sellDevFee = _floorDevFee;
            }
            if(!_goldenHourStarted && _recovered) {
                startGoldenHour();
                currentTax.buyBuybackFee = 0;
                currentTax.buyMarketingFee = 0;
                currentTax.buyLiquidityFee = 0;
                currentTax.buyReflectionFee = 0;
                currentTax.buyDevFee = 0;
                
                currentTax.sellBuybackFee = _floorBuybackFee;
                currentTax.sellMarketingFee = _floorMarketingFee;
                currentTax.sellLiquidityFee = _floorLiquidityFee;
                currentTax.sellReflectionFee = _floorReflectionFee;
                currentTax.sellDevFee = _floorDevFee;
                _recovered = false;
            }
        }
        if (currentPrice > _ath) {
            _ath = currentPrice;
        }
        
        return currentTax;
    }
    
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;
        
        DynamicTax memory currentTax;

        if (from != owner() && to != owner() && !presale && !_isContractWallet[from] && !_isContractWallet[to] && from != address(this) && to != address(this)) {
            require(tradingOpen);
            if (from != presaleRouter && from != presaleAddress) {
                require(amount <= _maxTxAmount);
            }
            if ((from == uniswapV2Pair || _isExchange[from]) && to != address(uniswapV2Router) && !_isExchange[to]) {//buys
                if (block.timestamp <= _firstBlock.add(_botBlocks) && from != presaleRouter && from != presaleAddress) {
                    bots[to] = true;
                }
                
                uint256 bnbAmount = this.getTokenPriceBNB(amount);
                
                require(bnbAmount >= _minBuyBNB, "you must buy at least min BNB worth of token");
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
                
                currentTax = updateFee();
                
            }
            
            if (!inSwap && from != uniswapV2Pair && !_isExchange[from]) { //sells, transfers
                require(!bots[from] && !bots[to]);
                
                if (!_isBridge[from] && !_isBridge[to]) {
                    if ((to == uniswapV2Pair || _isExchange[to]) && _sellCoolDownEnabled) {
                        require(sellcooldown[from] < block.timestamp);
                        sellcooldown[from] = block.timestamp.add(_cooldownBlocks);
                    }
                    
                    uint256 bnbAmount = this.getTokenPriceBNB(amount);
                    
                    require(bnbAmount >= _minSellBNB, "you must buy at least the min BNB worth of token");
                    
                    if(_dailyMaxEnabled) {
                        if(block.timestamp.sub(_firstSell[from]) > (1 days)) {
                            _firstSell[from] = block.timestamp;
                            _sellTotal[from] = 0;
                        }
                        require(_sellTotal[from].add(bnbAmount) <= _maxSellAmountBNB, "you cannot sell more than the max BNB amount per day");
                        _sellTotal[from] += bnbAmount;
                    }
                    else {
                        require(bnbAmount <= _maxSellAmountBNB, 'you cannot sell more than the max BNB amount per transaction');
                    }
                    
                    require(amount <= balanceOf(uniswapV2Pair).mul(_priceImpact).div(100)); // price impact limit
                    
                    if(to != uniswapV2Pair && !_isExchange[to]) {
                        require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
                    }

                    currentTax = updateFee();
                    
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance > 0) {

                        uint256 autoLPamount = _sellLiquidityFee.mul(contractTokenBalance).div(_sellBuybackFee.add(_sellMarketingFee).add(_sellLiquidityFee).add(_sellDevFee));
                        swapAndLiquify(autoLPamount);
                    
                        swapTokensForEth(contractTokenBalance.sub(autoLPamount));
                    }
                    uint256 contractETHBalance = address(this).balance;
                    if (contractETHBalance > 0) {
                        sendETHToFee(address(this).balance);
                    }
                    
                }
            }
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || presale || _isBridge[to] || _isBridge[from]) {
            restoreAllFee();
            takeFee = false;
        }

        if (bots[from] || bots[to]) {
            restoreAllFee();
            setBotFee();
            takeFee = true;
        }

        if (presale) {
            require(from == owner() || from == presaleRouter || from == presaleAddress);
        }
        
        _tokenTransfer(from, to, amount, takeFee, currentTax);
        restoreAllFee();
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
              address(this),
              tokenAmount,
              0, // slippage is unavoidable
              0, // slippage is unavoidable
              owner(),
              block.timestamp
          );
    }
  
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current BNB balance.
        // this is so that we can capture exactly the amount of BNB that the
        // swap creates, and not make the liquidity event include any BNB that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for BNB
        swapTokensForEth(half); // <- this breaks the BNB -> HATE swap when swap+liquify is triggered

        // how much BNB did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to pancakeswap
        addLiquidity(otherHalf, newBalance);
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount.mul(_marketingPercent).div(100));
        _buybackAddress.transfer(amount.mul(_buybackPercent).div(100));
        _developmentAddress.transfer(amount.mul(_devPercent).div(100));
        _projectMaintainence.transfer(amount.mul(_projectMaintainencePercent).div(100));
    }

    function openTrading(uint256 botBlocks, uint256 floorPercent) private {
        uint256 currentPrice = this.getTokenPrice();
        _floorPercent = floorPercent;
        _ath = currentPrice.mul(_floorPercent).div(100);
        previousClose = _ath;
        _firstBlock = block.timestamp;
        _botBlocks = botBlocks;
        tradingOpen = true;
    }

    function manualswap() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, DynamicTax memory currentTax) private {
        if (!takeFee) { 
                currentTax.buyBuybackFee = 0;
                currentTax.buyMarketingFee = 0;
                currentTax.buyLiquidityFee = 0;
                currentTax.buyReflectionFee = 0;
                currentTax.buyDevFee = 0;
                
                currentTax.sellBuybackFee = 0;
                currentTax.sellMarketingFee = 0;
                currentTax.sellLiquidityFee = 0;
                currentTax.sellReflectionFee = 0;
                currentTax.sellDevFee = 0;
        }
        if (sender == uniswapV2Pair || _isExchange[sender]){
            _transferStandardBuy(sender, recipient, amount, currentTax);
        }
        else {
            _transferStandardSell(sender, recipient, amount, currentTax);
        }
    }

    function _transferStandardBuy(address sender, address recipient, uint256 tAmount, DynamicTax memory currentTax) private {
        FinalFees memory buyFees;
        buyFees = _getValuesBuy(tAmount, currentTax);
        _rOwned[sender] = _rOwned[sender].sub(buyFees.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(buyFees.rTransferAmount);
        _takeBuyback(buyFees.tBuyback);
        _takeMarketing(buyFees.tMarketing);
        _reflectFee(buyFees.rReflection, buyFees.tReflection);
        _takeLiquidity(buyFees.tLiquidity);
        _takeDev(buyFees.tDev);
        emit Transfer(sender, recipient, buyFees.tTransferAmount);
    }

    function _transferStandardSell(address sender, address recipient, uint256 tAmount, DynamicTax memory currentTax) private {
        FinalFees memory sellFees;
        sellFees = _getValuesSell(tAmount, currentTax);
        _rOwned[sender] = _rOwned[sender].sub(sellFees.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(sellFees.rTransferAmount);
        if (recipient == _burnAddress) {
            _tOwned[recipient] = _tOwned[recipient].add(sellFees.tTransferAmount);
        }
        _takeBuyback(sellFees.tBuyback);
        _takeMarketing(sellFees.tMarketing);
        _reflectFee(sellFees.rReflection, sellFees.tReflection);
        _takeLiquidity(sellFees.tLiquidity);
        _takeDev(sellFees.tDev);
        emit Transfer(sender, recipient, sellFees.tTransferAmount);
    }

    function _reflectFee(uint256 rReflection, uint256 tReflection) private {
        _rTotal = _rTotal.sub(rReflection);
        _tFeeTotal = _tFeeTotal.add(tReflection);
    }

    function _takeBuyback(uint256 tBuyback) private {
        uint256 currentRate = _getRate();
        uint256 rBuyback = tBuyback.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rBuyback);
    }

    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }
    
    function _takeDev(uint256 tDev) private  {
        uint256 currentRate = _getRate();
        uint256 rDev = tDev.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rDev);
    }
    receive() external payable {}

    // Sell GetValues
    function _getValuesSell(uint256 tAmount, DynamicTax memory currentTax) private view returns (FinalFees memory) {
        SellBreakdown memory sellFees = _getTValuesSell(tAmount, currentTax.sellBuybackFee, currentTax.sellMarketingFee, currentTax.sellReflectionFee, currentTax.sellLiquidityFee, currentTax.sellDevFee);
        FinalFees memory finalFees;
        uint256 currentRate = _getRate();
        (finalFees.rAmount, finalFees.rTransferAmount, finalFees.rReflection) = _getRValuesSell(tAmount, sellFees.tBuyback, sellFees.tMarketing, sellFees.tReflection, sellFees.tLiquidity, sellFees.tDev, currentRate);
        finalFees.tBuyback = sellFees.tBuyback;
        finalFees.tMarketing = sellFees.tMarketing;
        finalFees.tReflection = sellFees.tReflection;
        finalFees.tLiquidity = sellFees.tLiquidity;
        finalFees.tDev = sellFees.tDev;
        finalFees.tTransferAmount = sellFees.tTransferAmount;
        return (finalFees);
    }

    function _getTValuesSell(uint256 tAmount, uint256 buybackFee, uint256 marketingFee, uint256 reflectionFee, uint256 liquidityFee, uint256 devFee) private pure returns (SellBreakdown memory) {
        SellBreakdown memory tsellFees;
        tsellFees.tBuyback = tAmount.mul(buybackFee).div(100);
        tsellFees.tMarketing = tAmount.mul(marketingFee).div(100);
        tsellFees.tReflection = tAmount.mul(reflectionFee).div(100);
        tsellFees.tLiquidity = tAmount.mul(liquidityFee).div(100);
        tsellFees.tDev = tAmount.mul(devFee).div(100);
        tsellFees.tTransferAmount = tAmount.sub(tsellFees.tBuyback).sub(tsellFees.tMarketing);
        tsellFees.tTransferAmount -= tsellFees.tReflection;
        tsellFees.tTransferAmount -= tsellFees.tLiquidity;
        tsellFees.tTransferAmount -= tsellFees.tDev;
        return (tsellFees);
    }

    function _getRValuesSell(uint256 tAmount, uint256 tBuyback, uint256 tMarketing, uint256 tReflection, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rBuyback = tBuyback.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rReflection = tReflection.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rBuyback).sub(rMarketing).sub(rReflection);
        rTransferAmount -= rLiquidity;
        rTransferAmount -= rDev;
        return (rAmount, rTransferAmount, rReflection);
    }

    // Buy GetValues
    function _getValuesBuy(uint256 tAmount, DynamicTax memory currentTax) private view returns (FinalFees memory) {
        BuyBreakdown memory buyFees = _getTValuesBuy(tAmount, currentTax.buyBuybackFee, currentTax.buyMarketingFee, currentTax.buyReflectionFee, currentTax.buyLiquidityFee, currentTax.buyDevFee);
        FinalFees memory finalFees;
        uint256 currentRate = _getRate();
        (finalFees.rAmount, finalFees.rTransferAmount, finalFees.rReflection) = _getRValuesBuy(tAmount, buyFees.tBuyback, buyFees.tMarketing, buyFees.tReflection, buyFees.tLiquidity, buyFees.tDev, currentRate);
        finalFees.tBuyback = buyFees.tBuyback;
        finalFees.tMarketing = buyFees.tMarketing;
        finalFees.tReflection = buyFees.tReflection;
        finalFees.tLiquidity = buyFees.tLiquidity;
        finalFees.tDev = buyFees.tDev;
        finalFees.tTransferAmount = buyFees.tTransferAmount;
        return (finalFees);
    }

    function _getTValuesBuy(uint256 tAmount, uint256 buybackFee, uint256 marketingFee, uint256 reflectionFee, uint256 liquidityFee, uint256 devFee) private pure returns (BuyBreakdown memory) {
        BuyBreakdown memory tbuyFees;
        tbuyFees.tBuyback = tAmount.mul(buybackFee).div(100);
        tbuyFees.tMarketing = tAmount.mul(marketingFee).div(100);
        tbuyFees.tReflection = tAmount.mul(reflectionFee).div(100);
        tbuyFees.tLiquidity = tAmount.mul(liquidityFee).div(100);
        tbuyFees.tDev = tAmount.mul(devFee).div(100);
        tbuyFees.tTransferAmount = tAmount.sub(tbuyFees.tBuyback).sub(tbuyFees.tMarketing);
        tbuyFees.tTransferAmount -= tbuyFees.tReflection;
        tbuyFees.tTransferAmount -= tbuyFees.tLiquidity;
        tbuyFees.tTransferAmount -= tbuyFees.tDev;
        return (tbuyFees);
    }

    function _getRValuesBuy(uint256 tAmount, uint256 tBuyback, uint256 tMarketing, uint256 tReflection, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rBuyback = tBuyback.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rReflection = tReflection.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rBuyback).sub(rMarketing).sub(rReflection);
        rTransferAmount -= rLiquidity;
        rTransferAmount -= rDev;
        return (rAmount, rTransferAmount, rReflection);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (_rOwned[_burnAddress] > rSupply || _tOwned[_burnAddress] > tSupply) return (_rTotal, _tTotal);
        rSupply = rSupply.sub(_rOwned[_burnAddress]);
        tSupply = tSupply.sub(_tOwned[_burnAddress]);
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

    function removeBot(address account) external onlyOwner() {
        bots[account] = false;
    }

    function addBot(address account) external onlyOwner() {
        bots[account] = true;
    }
    
    function excludeFromContractWallet(address account) public onlyOwner() {
        _isContractWallet[account] = true;
    }

    function includeInContractWallet(address account) external onlyOwner() {
        _isContractWallet[account] = false;
    }
    
    function includeInExchange(address account) external onlyOwner() {
        _isExchange[account] = true;
    }
    
    function excludeFromExchange(address account) external onlyOwner() {
        _isExchange[account] = false;
    }

    function includeInBridge(address account) external onlyOwner() {
        _isBridge[account] = true;
    }
    
    function excludeFromBridge(address account) external onlyOwner() {
        _isBridge[account] = false;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > 0, "Amount must be greater than 0");
        require(maxTxAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(_maxTxAmount);
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        require(maxWalletAmount > 0, "Amount must be greater than 0");
        require(maxWalletAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxWalletAmount = maxWalletAmount;
    }
    
    function setPercents(uint256 marketingPercent, uint256 buybackPercent, uint256 devPercent) external onlyOwner() {
        require(marketingPercent.add(buybackPercent).add(devPercent) == 95, "Sum of percents must equal 95");
        _marketingPercent = marketingPercent;
        _buybackPercent = buybackPercent;
        _devPercent = devPercent;
        emit PercentsUpdated(_marketingPercent, _buybackPercent, _devPercent);
    }

    function setTaxes(uint256 buyMarketingFee, uint256 buyBuybackFee, uint256 buyReflectionFee, uint256 buyLiquidityFee, uint256 buyDevFee, uint256 sellMarketingFee, uint256 sellBuybackFee, uint256 sellReflectionFee, uint256 sellLiquidityFee, uint256 sellDevFee) external onlyOwner() {
        uint256 buyTax = buyMarketingFee.add(buyBuybackFee).add(buyReflectionFee);
        buyTax += buyLiquidityFee.add(buyDevFee);
        uint256 sellTax = sellMarketingFee.add(sellBuybackFee).add(sellReflectionFee);
        sellTax += sellLiquidityFee.add(sellDevFee);
        require(buyTax < 50, "Sum of sell fees must be less than 50");
        require(sellTax < 50, "Sum of buy fees must be less than 50");
        _buyMarketingFee = buyMarketingFee;
        _buyBuybackFee = buyBuybackFee;
        _buyReflectionFee = buyReflectionFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyDevFee = buyDevFee;
        _sellMarketingFee = sellMarketingFee;
        _sellBuybackFee = sellBuybackFee;
        _sellReflectionFee = sellReflectionFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellDevFee = sellDevFee;
        
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyBuybackFee = _buyBuybackFee;
        _previousBuyReflectionFee = _buyReflectionFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _previousBuyDevFee = _buyDevFee;
        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellBuybackFee = _sellBuybackFee;
        _previousSellReflectionFee = _sellReflectionFee;
        _previousSellLiquidityFee = _sellLiquidityFee;
        _previousSellDevFee = _sellDevFee;
        
        emit FeesUpdated(_buyBuybackFee, _buyMarketingFee, _buyLiquidityFee, _buyReflectionFee, _buyDevFee, _sellBuybackFee, _sellMarketingFee, _sellLiquidityFee, _sellReflectionFee, _sellDevFee);
    }

    function setPriceImpact(uint256 priceImpact) external onlyOwner() {
        require(priceImpact <= 100, "max price impact must be less than or equal to 100");
        require(priceImpact > 0, "cant prevent sells, choose value greater than 0");
        _priceImpact = priceImpact;
        emit PriceImpactUpdated(_priceImpact);
    }

    function setManualETHvalue(uint256 val) external onlyOwner() {
        manualETHvalue = int(val.mul(10**8));//18));
    }

    function updateOraclePriceFeed(address feed) external onlyOwner() {
        _oraclePriceFeed = feed;
    }

    function setPresaleRouterAndAddress(address router, address wallet) external onlyOwner() {
        presaleRouter = router;
        presaleAddress = wallet;
        excludeFromFee(presaleRouter);
        excludeFromFee(presaleAddress);
    }

    function endPresale(uint256 botBlocks, uint256 floorPercent) external onlyOwner() {
        require(presale == true, "presale already ended");
        presale = false;
        openTrading(botBlocks, floorPercent);
        emit EndedPresale(presale);
    }

    function enablePriceOracle() external onlyOwner() {
        require(priceOracleEnabled == false, "price oracle already enabled");
        priceOracleEnabled = true;
    }

    function disablePriceOracle() external onlyOwner() {
        require(priceOracleEnabled == true, "price oracle already disabled");
        priceOracleEnabled = false;
    }

    function setFloor() external onlyOwner() {
        previousClose = _ath.mul(_floorPercent).div(100);
        _ath = previousClose;
    }
    
    function setFloorPercent(uint256 floorPercent) external onlyOwner() {
        require(floorPercent > 0 && floorPercent <= 100, 'floorPercent needs to be between 0 and 100');
        _floorPercent = floorPercent;
    }
    function updateTaxFreeBlocks(uint256 taxFreeBlocks) external onlyOwner() {
        _taxFreeBlocks = taxFreeBlocks;
    }

    function updatePairSwapped(bool swapped) external onlyOwner() {
        pairSwapped = swapped;
    }
    
    function updateMinBuySellBNB(uint256 minBuyBNB, uint256 minSellBNB) external onlyOwner() {
        _minBuyBNB = minBuyBNB;
        _minSellBNB = minSellBNB;
    }
    
    function updateMaxSellAmountBNB(uint256 maxSellBNB) external onlyOwner() {
        _maxSellAmountBNB = maxSellBNB;
    }
    
    function startGoldenHour() private {
        _goldenHourStartBlock = block.timestamp;
        _goldenHourStarted = true;
        _taxFreeWindowEnd = block.timestamp.add(_taxFreeBlocks);
        _slideEndBlock = _taxFreeWindowEnd.add(_taxFreeBlocks);
    }

    function enableSellCoolDown() external onlyOwner() {
        require(!_sellCoolDownEnabled, "already enabled");
        _sellCoolDownEnabled = true;
    }
    
    function disableSellCoolDown() external onlyOwner() {
        require(_sellCoolDownEnabled, "already disabled");
        _sellCoolDownEnabled = false;
    }
    
    function enableDailyMax() external onlyOwner() {
        require(!_dailyMaxEnabled, 'already enabled');
        _dailyMaxEnabled = true;
    }
    
    function disableDailyMax() external onlyOwner() {
        require(_dailyMaxEnabled, 'already diabled');
        _dailyMaxEnabled = false;
    }
    
    function setFloorFees(uint256 floorMarketingFee, uint256 floorBuybackFee, uint256 floorReflectionFee, uint256 floorLiquidityFee, uint256 floorDevFee) external onlyOwner() {
        require(floorMarketingFee.add(floorBuybackFee).add(floorReflectionFee).add(floorLiquidityFee).add(floorDevFee) < 50, "sum of fees must be less than 50");
        _floorMarketingFee = floorMarketingFee;
        _floorBuybackFee = floorBuybackFee;
        _floorReflectionFee = floorReflectionFee;
        _floorLiquidityFee = floorLiquidityFee;
        _floorDevFee = floorDevFee;
    }
    
    function setSlideFees(uint256 slideMarketingFee, uint256 slideBuybackFee, uint256 slideReflectionFee, uint256 slideLiquidityFee, uint256 slideDevFee) external onlyOwner() {
        require(slideMarketingFee.add(slideBuybackFee).add(slideReflectionFee).add(slideLiquidityFee).add(slideDevFee) < 50, "sum of fees must be less than 50");
        _slideMarketingFee = slideMarketingFee;
        _slideBuybackFee = slideBuybackFee;
        _slideReflectionFee = slideReflectionFee;
        _slideLiquidityFee = slideLiquidityFee;
        _slideDevFee = slideDevFee;
    }
    
    function setCoolDownBlocks(uint256 cooldownBlocks) external onlyOwner() {
        _cooldownBlocks = cooldownBlocks;
    }
    
    function updateBuyBackAddress(address payable buybackAddress) external onlyOwner() {
        _buybackAddress = buybackAddress;
    }
    
    function updateMarketingAddress(address payable marketingAddress) external onlyOwner() {
        _marketingAddress = marketingAddress;
    }
    
    function updateDevelopmentAddress(address payable developmentAddress) external onlyOwner() {
        _developmentAddress = developmentAddress;
    }
    
    function getRemainingSellLimit(address payable account) external view returns (uint256) {
        if (_dailyMaxEnabled) {
            return _maxSellAmountBNB.sub(_sellTotal[account]);
        }
        return _maxSellAmountBNB;
    }
    
    function getTimeLimit(address payable account) external view returns (uint256) {
        if (_sellCoolDownEnabled && !_dailyMaxEnabled) {
            if(sellcooldown[account] < block.timestamp) {
                return block.timestamp.sub(sellcooldown[account]); // seconds remaining until cooldown is over
            }
            return 0; // not in cooldown, can sell now
        }
        else if (_sellCoolDownEnabled && _dailyMaxEnabled) {
            if (_maxSellAmountBNB.sub(_sellTotal[account]) > 0) {
                if (sellcooldown[account] > block.timestamp) {
                    return sellcooldown[account].sub(block.timestamp); // seconds remaining until cooldown is over
                }
                else {
                    return 0; // not in cooldown, can sell now
                }
            }
            else {
                if (block.timestamp > _firstSell[account].add(1 days)) {
                    return 0; // it's been more than 24 hours, can sell now
                }
                else {
                    return (uint256(1 days).add(_firstSell[account])).sub(block.timestamp); // seconds remaining until 24 hours have passed
                }
            }
            
        }
        else {
            return 0; // can sell now
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"presale","type":"bool"}],"name":"EndedPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_buyBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyReflectionFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellBuyBackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellReflectionFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buybackPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devPercent","type":"uint256"}],"name":"PercentsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_priceImpact","type":"uint256"}],"name":"PriceImpactUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"sellOnly","type":"bool"}],"name":"SellOnlyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hundredMinusDipPercent","type":"uint256"}],"name":"UpdatedAllowableDip","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"GTblock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"LTblock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockWindow","type":"uint256"}],"name":"UpdatedHighLowWindows","type":"event"},{"inputs":[],"name":"_buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_floorBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_floorDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_floorLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_floorMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_floorReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_goldenHourStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_goldenHourStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_oraclePriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_recovered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_slideBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_slideDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_slideLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_slideMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_slideReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableDailyMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSellCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableDailyMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSellCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"},{"internalType":"uint256","name":"floorPercent","type":"uint256"}],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromContractWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"getRemainingSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"getTimeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPriceBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInContractWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cooldownBlocks","type":"uint256"}],"name":"setCoolDownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"floorMarketingFee","type":"uint256"},{"internalType":"uint256","name":"floorBuybackFee","type":"uint256"},{"internalType":"uint256","name":"floorReflectionFee","type":"uint256"},{"internalType":"uint256","name":"floorLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"floorDevFee","type":"uint256"}],"name":"setFloorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"floorPercent","type":"uint256"}],"name":"setFloorPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setManualETHvalue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingPercent","type":"uint256"},{"internalType":"uint256","name":"buybackPercent","type":"uint256"},{"internalType":"uint256","name":"devPercent","type":"uint256"}],"name":"setPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleRouterAndAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"name":"setPriceImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slideMarketingFee","type":"uint256"},{"internalType":"uint256","name":"slideBuybackFee","type":"uint256"},{"internalType":"uint256","name":"slideReflectionFee","type":"uint256"},{"internalType":"uint256","name":"slideLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"slideDevFee","type":"uint256"}],"name":"setSlideFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyBuybackFee","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellBuybackFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackAddress","type":"address"}],"name":"updateBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"developmentAddress","type":"address"}],"name":"updateDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellBNB","type":"uint256"}],"name":"updateMaxSellAmountBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuyBNB","type":"uint256"},{"internalType":"uint256","name":"minSellBNB","type":"uint256"}],"name":"updateMinBuySellBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateOraclePriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapped","type":"bool"}],"name":"updatePairSwapped","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFreeBlocks","type":"uint256"}],"name":"updateTaxFreeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001c69d3c21bcecceda10000006000196200086c565b6200002a9060001962000848565b600c556002600e8190556801158e460913d00000601355662386f26fc1000060148190556015908155610e10601681905560175560006019818155601a805460ff19908116909155601b839055601c80549091166001908117909155600a601d819055601f9390935560209390935560076021819055600560228190556004602381905560036024819055600d6025556026839055602781905560288890556029879055602a839055602b92909255602c829055602d829055602e879055602f8790556030829055603182905560328690556033869055603483905560359290925560368190556037556038859055603994909455603a849055603b93909355603c828155603d92909255603e55603f919091556040556042805473a5347334af09bbc6c2456ab435f54ef8189fa7096001600160a01b031991821617909155604380547364ce548b7fe68e7e23892f1f8ff600595d74484e90831617905560448054734765a8f2402e4769adfa7b3e54bb30f5dd7702fd9216919091179055604a805465ffffffffffff191665010100010000179055604b80546001600160a81b03191674010567f2323251f0aab15c8dfb1967e4e8a7d42aee1790556445d964b800604c55348015620001fe57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e90811790915562000280308269d3c21bcecceda1000000620005d7565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ba57600080fd5b505afa158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000790565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033e57600080fd5b505afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000790565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003c257600080fd5b505af1158015620003d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fd919062000790565b604880546001600160a01b0319166001600160a01b0392831690811790915560475460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200046057600080fd5b505af115801562000475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049b9190620007b9565b50604b54604a8054600160301b600160d01b0319166001600160a01b039092166601000000000000029190911790556000600f5569d3c21bcecceda10000006049819055620004f890600162000703602090811b62002ddd17901c565b601255600c543360008181526002602090815260408083209490945581546001600160a01b039081168352600882528483208054600160ff1991821681179092553085528685208054821683179055604280548416865287862080548316841790556043805485168752888720805484168517905554841686526009855287862080548316841790555490921684528584208054909216179055925169d3c21bcecceda10000008152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000899565b6001600160a01b0383166200063f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000636565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006200074d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200075460201b60201c565b9392505050565b60008183620007785760405162461bcd60e51b8152600401620006369190620007db565b50600062000787848662000831565b95945050505050565b600060208284031215620007a2578081fd5b81516001600160a01b03811681146200074d578182fd5b600060208284031215620007cb578081fd5b815180151581146200074d578182fd5b6000602080835283518082850152825b818110156200080957858101830151858201604001528201620007eb565b818111156200081b5783604083870101525b50601f01601f1916929092016040019392505050565b60008262000843576200084362000883565b500490565b6000828210156200086757634e487b7160e01b81526011600452602481fd5b500390565b6000826200087e576200087e62000883565b500690565b634e487b7160e01b600052601260045260246000fd5b6153e580620008a96000396000f3fe60806040526004361061048d5760003560e01c80637ddf864311610255578063bfa91ba111610144578063dbdc3209116100c1578063ea2f0b3711610085578063ea2f0b3714610d70578063ec28438a14610d90578063efe8a45e14610db0578063f97fc2e714610dd0578063fefa5ce314610de6578063ffecf51614610e0657600080fd5b8063dbdc320914610cd3578063dc44b6a014610ce9578063dc484b2814610cff578063dd1e1ca914610d15578063dd62ed3e14610d2a57600080fd5b8063c5d2418911610108578063c5d2418914610c62578063c860795214610c78578063c862c28b14610c8e578063c9cf778914610ca3578063d582a70f14610cb957600080fd5b8063bfa91ba114610bd7578063c11e176214610bf7578063c193e75814610c17578063c2f77e4114610c2d578063c3c8cd8014610c4d57600080fd5b806393b9517f116101d2578063a9059cbb11610196578063a9059cbb14610b56578063ac53817414610b76578063aecace8114610b8c578063bba9215514610ba1578063bfa31ff914610bc157600080fd5b806393b9517f14610abc57806395d89b4114610ad15780639ffc608b14610b00578063a1d8dd9614610b20578063a734cef714610b3657600080fd5b80638ae1cf22116102195780638ae1cf22146109fd5780638b7ccac014610a1d5780638da5cb5b14610a325780638e15f47314610a50578063905e292314610a9c57600080fd5b80637ddf86431461097d5780637ec84cfa1461099257806388359561146109a757806388790a68146109c7578063899c9469146109dd57600080fd5b80634919f1ce1161037c5780636235e93f116102f957806370a08231116102bd57806370a08231146108dc578063715018a6146108fc57806373b8a8fa146109115780637598f8bc146109275780637a6d43981461093d5780637d9d1d711461095d57600080fd5b80636235e93f14610851578063694d9d17146108715780636c0a24eb146108915780636d77ecd1146108a75780636fc3eaec146108c757600080fd5b8063543f8f7811610340578063543f8f78146107c5578063550221f5146107e55780635c0220d7146108055780635fecd9261461081b578063620158521461083b57600080fd5b80634919f1ce1461072857806349bd5a5e146107485780634b94f50e146107805780634de439701461079557806353243761146107ab57600080fd5b80632b929aa81161040a5780633f5e0c05116103ce5780633f5e0c051461069c57806340177983146106bc578063401aa5c0146106dc57806341d05b08146106f2578063437823ec1461070857600080fd5b80632b929aa81461061457806330b5654c14610634578063313ce5671461064a57806334596c16146106665780633a6738be1461068657600080fd5b806318160ddd1161045157806318160ddd146105775780632369bf831461059457806323b872dd146105b457806323bf4c86146105d457806327a14fc2146105f457600080fd5b806301c4eaac1461049957806306fdde03146104bb578063095ea7b314610503578063099a65b51461053357806311577a011461055757600080fd5b3661049457005b600080fd5b3480156104a557600080fd5b506104b96104b4366004614f33565b610e26565b005b3480156104c757600080fd5b5060408051808201909152600d81526c0a0e4ded4cac6e84088dececab609b1b60208201525b6040516104fa9190615044565b60405180910390f35b34801561050f57600080fd5b5061052361051e366004614df1565b610ed7565b60405190151581526020016104fa565b34801561053f57600080fd5b5061054960255481565b6040519081526020016104fa565b34801561056357600080fd5b506104b9610572366004614d41565b610eee565b34801561058357600080fd5b5069d3c21bcecceda1000000610549565b3480156105a057600080fd5b506104b96105af366004614d41565b610f3c565b3480156105c057600080fd5b506105236105cf366004614db1565b610f88565b3480156105e057600080fd5b506104b96105ef366004614d41565b610ff1565b34801561060057600080fd5b506104b961060f366004614e8a565b61103d565b34801561062057600080fd5b506104b961062f366004614e8a565b6110e6565b34801561064057600080fd5b5061054960285481565b34801561065657600080fd5b50604051600981526020016104fa565b34801561067257600080fd5b506104b9610681366004614e1c565b611220565b34801561069257600080fd5b5061054960225481565b3480156106a857600080fd5b506104b96106b7366004614eba565b611268565b3480156106c857600080fd5b506104b96106d7366004614f6d565b61129d565b3480156106e857600080fd5b50610549602e5481565b3480156106fe57600080fd5b5061054960345481565b34801561071457600080fd5b506104b9610723366004614d41565b6114b8565b34801561073457600080fd5b506104b9610743366004614d41565b611506565b34801561075457600080fd5b50604854610768906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561078c57600080fd5b50610549611551565b3480156107a157600080fd5b5061054960235481565b3480156107b757600080fd5b50601c546105239060ff1681565b3480156107d157600080fd5b506104b96107e0366004614e8a565b611a6d565b3480156107f157600080fd5b506104b9610800366004614e8a565b611a9c565b34801561081157600080fd5b5061054960275481565b34801561082757600080fd5b506104b9610836366004614d41565b611acb565b34801561084757600080fd5b5061054960325481565b34801561085d57600080fd5b506104b961086c366004614e8a565b611b16565b34801561087d57600080fd5b506104b961088c366004614d41565b611b45565b34801561089d57600080fd5b5061054960125481565b3480156108b357600080fd5b50604b54610768906001600160a01b031681565b3480156108d357600080fd5b506104b9611b91565b3480156108e857600080fd5b506105496108f7366004614d41565b611bbe565b34801561090857600080fd5b506104b9611be0565b34801561091d57600080fd5b5061054960205481565b34801561093357600080fd5b5061054960385481565b34801561094957600080fd5b506104b9610958366004614d79565b611c54565b34801561096957600080fd5b506104b9610978366004614d41565b611cce565b34801561098957600080fd5b506104b9611d19565b34801561099e57600080fd5b506104b9611da0565b3480156109b357600080fd5b506104b96109c2366004614f33565b611e2e565b3480156109d357600080fd5b50610549603a5481565b3480156109e957600080fd5b506104b96109f8366004614d41565b611ed0565b348015610a0957600080fd5b506104b9610a18366004614d41565b611f1e565b348015610a2957600080fd5b506104b9611f6a565b348015610a3e57600080fd5b506000546001600160a01b0316610768565b348015610a5c57600080fd5b50610a65611fc0565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016104fa565b348015610aa857600080fd5b50610549610ab7366004614d41565b61206b565b348015610ac857600080fd5b506104b96120ad565b348015610add57600080fd5b50604080518082019091526006815265048889e8e8ab60d31b60208201526104ed565b348015610b0c57600080fd5b506104b9610b1b366004614d41565b612133565b348015610b2c57600080fd5b5061054960295481565b348015610b4257600080fd5b50610549610b51366004614d41565b612181565b348015610b6257600080fd5b50610523610b71366004614df1565b6122fc565b348015610b8257600080fd5b5061054960245481565b348015610b9857600080fd5b506104b9612309565b348015610bad57600080fd5b506104b9610bbc366004614eba565b612396565b348015610bcd57600080fd5b50610549600e5481565b348015610be357600080fd5b506104b9610bf2366004614d41565b612470565b348015610c0357600080fd5b506104b9610c12366004614e8a565b6124bb565b348015610c2357600080fd5b50610549602a5481565b348015610c3957600080fd5b50610549610c48366004614e8a565b61255a565b348015610c5957600080fd5b506104b96129ed565b348015610c6e57600080fd5b50610549602c5481565b348015610c8457600080fd5b5061054960365481565b348015610c9a57600080fd5b506104b9612a23565b348015610caf57600080fd5b50610549603c5481565b348015610cc557600080fd5b50601a546105239060ff1681565b348015610cdf57600080fd5b5061054960215481565b348015610cf557600080fd5b5061054960305481565b348015610d0b57600080fd5b5061054960265481565b348015610d2157600080fd5b506104b9612abc565b348015610d3657600080fd5b50610549610d45366004614d79565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610d7c57600080fd5b506104b9610d8b366004614d41565b612b53565b348015610d9c57600080fd5b506104b9610dab366004614e8a565b612b9e565b348015610dbc57600080fd5b506104b9610dcb366004614edb565b612c77565b348015610ddc57600080fd5b5061054960195481565b348015610df257600080fd5b506104b9610e01366004614e8a565b612d51565b348015610e1257600080fd5b506104b9610e21366004614d41565b612d8f565b6000546001600160a01b03163314610e595760405162461bcd60e51b8152600401610e50906150fe565b60405180910390fd5b6032610e7382610e6d858188818c8c612e26565b90612e26565b10610ec05760405162461bcd60e51b815260206004820181905260248201527f73756d206f662066656573206d757374206265206c657373207468616e2035306044820152606401610e50565b602694909455602592909255602855602755602955565b6000610ee4338484612e85565b5060015b92915050565b6000546001600160a01b03163314610f185760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314610f665760405162461bcd60e51b8152600401610e50906150fe565b604280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f95848484612fa9565b610fe78433610fe285604051806060016040528060288152602001615388602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190613ad4565b612e85565b5060019392505050565b6000546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610e50906150fe565b604b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110675760405162461bcd60e51b8152600401610e50906150fe565b600081116110b75760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e50565b69d3c21bcecceda10000008111156110e15760405162461bcd60e51b8152600401610e5090615133565b601255565b6000546001600160a01b031633146111105760405162461bcd60e51b8152600401610e50906150fe565b606481111561117c5760405162461bcd60e51b815260206004820152603260248201527f6d617820707269636520696d70616374206d757374206265206c6573732074686044820152710616e206f7220657175616c20746f203130360741b6064820152608401610e50565b600081116111e45760405162461bcd60e51b815260206004820152602f60248201527f63616e742070726576656e742073656c6c732c2063686f6f73652076616c756560448201526e02067726561746572207468616e203608c1b6064820152608401610e50565b600e8190556040518181527f585981c0db15e25002a67c38e62f983f189bb219fae23eb213566640fbae5e3c906020015b60405180910390a150565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610e50906150fe565b604a805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146112925760405162461bcd60e51b8152600401610e50906150fe565b601491909155601555565b6000546001600160a01b031633146112c75760405162461bcd60e51b8152600401610e50906150fe565b60006112d789610e6d8d8d612e26565b90506112e38888612e26565b6112ed90826151f3565b905060006112ff85610e6d8989612e26565b905061130b8484612e26565b61131590826151f3565b9050603282106113755760405162461bcd60e51b815260206004820152602560248201527f53756d206f662073656c6c2066656573206d757374206265206c6573732074686044820152640616e2035360dc1b6064820152608401610e50565b603281106113d15760405162461bcd60e51b8152602060048201526024808201527f53756d206f66206275792066656573206d757374206265206c6573732074686160448201526306e2035360e41b6064820152608401610e50565b602c8c9055602a8b9055602e8a905560308990556032889055603687905560348690556038859055603a849055603c839055602d8c9055602b8b9055602f8a905560318990556033889055603787905560358690556039859055603b849055603d839055604080518c8152602081018e90529081018a9052606081018b90526080810189905260a0810187905260c0810188905260e08101859052610100810186905261012081018490527fb1c1aa9a8102a96f0a74512c201053ebbee946dc4ed37a8a48910d0100e086b2906101400160405180910390a1505050505050505050505050565b6000546001600160a01b031633146114e25760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b600080604860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a257600080fd5b505afa1580156115b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115da9190614d5d565b90506000604860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116649190614d5d565b9050600080604860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156116b757600080fd5b505afa1580156116cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ef9190614e3c565b50604a5491935091506301000000900460ff16156118a357604860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561175557600080fd5b505afa158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d9190614d5d565b9350604860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156117dd57600080fd5b505afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118159190614d5d565b9250604860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561186557600080fd5b505afa158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d9190614e3c565b50925090505b604c54604b54600160a01b900460ff161561193157306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a06040518083038186803b1580156118f157600080fd5b505afa158015611905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119299190614fd4565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561196c57600080fd5b505afa158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a49190615023565b60ff16866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e057600080fd5b505afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190615023565b611a269060ff16600a61526e565b611a39846001600160701b038716615326565b611a439190615326565b611a4d919061520b565b9050611a626001600160701b0385168261520b565b965050505050505090565b6000546001600160a01b03163314611a975760405162461bcd60e51b8152600401610e50906150fe565b601755565b6000546001600160a01b03163314611ac65760405162461bcd60e51b8152600401610e50906150fe565b601655565b6000546001600160a01b03163314611af55760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152604160205260409020805460ff19169055565b6000546001600160a01b03163314611b405760405162461bcd60e51b8152600401610e50906150fe565b601355565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b8152600401610e50906150fe565b604480546001600160a01b0319166001600160a01b0392909216919091179055565b6042546001600160a01b0316336001600160a01b031614611bb157600080fd5b47611bbb81613b0e565b50565b6001600160a01b038116600090815260026020526040812054610ee890613c51565b6000546001600160a01b03163314611c0a5760405162461bcd60e51b8152600401610e50906150fe565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610e50906150fe565b604580546001600160a01b038085166001600160a01b031992831681179093556046805491851691909216179055611cb5906114b8565b604654611cca906001600160a01b03166114b8565b5050565b6000546001600160a01b03163314611cf85760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611d435760405162461bcd60e51b8152600401610e50906150fe565b604a54640100000000900460ff16611d905760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610e50565b604a805464ff0000000019169055565b6000546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610e50906150fe565b604a54640100000000900460ff1615611e175760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610e50565b604a805464ff000000001916640100000000179055565b6000546001600160a01b03163314611e585760405162461bcd60e51b8152600401610e50906150fe565b6032611e6c82610e6d858188818c8c612e26565b10611eb95760405162461bcd60e51b815260206004820181905260248201527f73756d206f662066656573206d757374206265206c657373207468616e2035306044820152606401610e50565b602194909455602092909255602355602255602455565b6000546001600160a01b03163314611efa5760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f485760405162461bcd60e51b8152600401610e50906150fe565b604380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611f945760405162461bcd60e51b8152600401610e50906150fe565b611fb66064611fb0601e54601f54613cce90919063ffffffff16565b90612ddd565b600f819055601f55565b600080600080600080600080600080604a60069054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561201d57600080fd5b505afa158015612031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120559190614fd4565b939e929d50909b50995090975095505050505050565b604a54600090600160281b900460ff16156120a5576001600160a01b038216600090815260056020526040902054601354610ee891613d4d565b505060135490565b6000546001600160a01b031633146120d75760405162461bcd60e51b8152600401610e50906150fe565b604a54600160281b900460ff166121225760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48191a58589b1959608a1b6044820152606401610e50565b604a805465ff000000000019169055565b6000546001600160a01b0316331461215d5760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b604a54600090640100000000900460ff1680156121a85750604a54600160281b900460ff16155b156121f9576001600160a01b0382166000908152600460205260409020544211156121f1576001600160a01b038216600090815260046020526040902054610ee8904290613d4d565b506000919050565b604a54640100000000900460ff16801561221c5750604a54600160281b900460ff165b156121f1576001600160a01b03821660009081526005602052604081205460135461224691613d4d565b111561228f576001600160a01b0382166000908152600460205260409020544210156121f1576001600160a01b038216600090815260046020526040902054610ee89042613d4d565b6001600160a01b0382166000908152600660205260409020546122b59062015180612e26565b4211156122c457506000919050565b6001600160a01b038216600090815260066020526040902054610ee89042906122f1906201518090612e26565b90613d4d565b919050565b6000610ee4338484612fa9565b6000546001600160a01b031633146123335760405162461bcd60e51b8152600401610e50906150fe565b604a54600160281b900460ff161561237f5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610e50565b604a805465ff00000000001916600160281b179055565b6000546001600160a01b031633146123c05760405162461bcd60e51b8152600401610e50906150fe565b604a5462010000900460ff1615156001146124155760405162461bcd60e51b81526020600482015260156024820152741c1c995cd85b1948185b1c9958591e48195b991959605a1b6044820152606401610e50565b604a805462ff00001916905561242b8282613d8f565b604a546040516201000090910460ff16151581527fbad30b8287730cfd8b6df18f878abbd745dc20365bfec848056cad8e6c17b91b9060200160405180910390a15050565b6000546001600160a01b0316331461249a5760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b031633146124e55760405162461bcd60e51b8152600401610e50906150fe565b6000811180156124f6575060648111155b6125555760405162461bcd60e51b815260206004820152602a60248201527f666c6f6f7250657263656e74206e6565647320746f206265206265747765656e6044820152690203020616e64203130360b41b6064820152608401610e50565b601e55565b600080604860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ab57600080fd5b505afa1580156125bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e39190614d5d565b90506000604860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561263557600080fd5b505afa158015612649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266d9190614d5d565b9050600080604860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126c057600080fd5b505afa1580156126d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f89190614e3c565b50604a5491935091506301000000900460ff16156128ac57604860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561275e57600080fd5b505afa158015612772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127969190614d5d565b9350604860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156127e657600080fd5b505afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e9190614d5d565b9250604860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561286e57600080fd5b505afa158015612882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a69190614e3c565b50925090505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e757600080fd5b505afa1580156128fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291f9190615023565b61292a90600a61527a565b61293d906001600160701b038416615326565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561297857600080fd5b505afa15801561298c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b09190615023565b6129bb90600a61527a565b6129ce906001600160701b038516615326565b6129d88289615326565b6129e2919061520b565b979650505050505050565b6042546001600160a01b0316336001600160a01b031614612a0d57600080fd5b6000612a1830611bbe565b9050611bbb81613e38565b6000546001600160a01b03163314612a4d5760405162461bcd60e51b8152600401610e50906150fe565b604b54600160a01b900460ff1615612aa75760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610e50565b604b805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314612ae65760405162461bcd60e51b8152600401610e50906150fe565b604b54600160a01b900460ff161515600114612b445760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610e50565b604b805460ff60a01b19169055565b6000546001600160a01b03163314612b7d5760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314612bc85760405162461bcd60e51b8152600401610e50906150fe565b60008111612c185760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e50565b69d3c21bcecceda1000000811115612c425760405162461bcd60e51b8152600401610e5090615133565b60498190556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90602001611215565b6000546001600160a01b03163314612ca15760405162461bcd60e51b8152600401610e50906150fe565b612caf81610e6d8585612e26565b605f14612cfe5760405162461bcd60e51b815260206004820152601d60248201527f53756d206f662070657263656e7473206d75737420657175616c2039350000006044820152606401610e50565b603f8390556040828155603e8290558051848152602081018490529081018290527f27224e2696b8b5ac8d85f4e227d20f3116a7d3b066e62b3d355dfeebd302231a9060600160405180910390a1505050565b6000546001600160a01b03163314612d7b5760405162461bcd60e51b8152600401610e50906150fe565b612d89816305f5e100613cce565b604c5550565b6000546001600160a01b03163314612db95760405162461bcd60e51b8152600401610e50906150fe565b6001600160a01b03166000908152604160205260409020805460ff19166001179055565b6000612e1f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fd7565b9392505050565b600080612e3383856151f3565b905083811015612e1f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e50565b6001600160a01b038316612ee75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e50565b6001600160a01b038216612f485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e50565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661300d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e50565b6001600160a01b03821661306f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e50565b600081116130d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e50565b60016130db614c71565b6000546001600160a01b0386811691161480159061310757506000546001600160a01b03858116911614155b801561311c5750604a5462010000900460ff16155b801561314157506001600160a01b03851660009081526009602052604090205460ff16155b801561316657506001600160a01b03841660009081526009602052604090205460ff16155b801561317b57506001600160a01b0385163014155b801561319057506001600160a01b0384163014155b1561390557604a5460ff166131a457600080fd5b6045546001600160a01b038681169116148015906131d057506046546001600160a01b03868116911614155b156131e4576049548311156131e457600080fd5b6048546001600160a01b038681169116148061321857506001600160a01b0385166000908152600a602052604090205460ff165b801561323257506047546001600160a01b03858116911614155b801561325757506001600160a01b0384166000908152600a602052604090205460ff16155b156133e05760115460105461326b91612e26565b421115801561328857506045546001600160a01b03868116911614155b80156132a257506046546001600160a01b03868116911614155b156132cb576001600160a01b0384166000908152604160205260409020805460ff191660011790555b60405163c2f77e4160e01b815260048101849052600090309063c2f77e419060240160206040518083038186803b15801561330557600080fd5b505afa158015613319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333d9190614ea2565b90506014548110156133a65760405162461bcd60e51b815260206004820152602c60248201527f796f75206d75737420627579206174206c65617374206d696e20424e4220776f60448201526b393a341037b3103a37b5b2b760a11b6064820152608401610e50565b6012546133b685610e6d88611bbe565b11156133d45760405162461bcd60e51b8152600401610e5090615097565b6133dc614005565b9150505b604a54610100900460ff1615801561340657506048546001600160a01b03868116911614155b801561342b57506001600160a01b0385166000908152600a602052604090205460ff16155b15613905576001600160a01b03851660009081526041602052604090205460ff1615801561347257506001600160a01b03841660009081526041602052604090205460ff16155b61347b57600080fd5b6001600160a01b0385166000908152600b602052604090205460ff161580156134bd57506001600160a01b0384166000908152600b602052604090205460ff16155b15613905576048546001600160a01b03858116911614806134f657506001600160a01b0384166000908152600a602052604090205460ff165b801561350c5750604a54640100000000900460ff165b1561355d576001600160a01b038516600090815260046020526040902054421161353557600080fd5b601754613543904290612e26565b6001600160a01b0386166000908152600460205260409020555b60405163c2f77e4160e01b815260048101849052600090309063c2f77e419060240160206040518083038186803b15801561359757600080fd5b505afa1580156135ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cf9190614ea2565b905060155481101561363c5760405162461bcd60e51b815260206004820152603060248201527f796f75206d75737420627579206174206c6561737420746865206d696e20424e60448201526f21103bb7b93a341037b3103a37b5b2b760811b6064820152608401610e50565b604a54600160281b900460ff1615613768576001600160a01b0386166000908152600660205260409020546201518090613677904290613d4d565b11156136a4576001600160a01b038616600090815260066020908152604080832042905560059091528120555b6013546001600160a01b0387166000908152600560205260409020546136ca9083612e26565b11156137355760405162461bcd60e51b815260206004820152603460248201527f796f752063616e6e6f742073656c6c206d6f7265207468616e20746865206d616044820152737820424e4220616d6f756e74207065722064617960601b6064820152608401610e50565b6001600160a01b0386166000908152600560205260408120805483929061375d9084906151f3565b909155506137e09050565b6013548111156137e05760405162461bcd60e51b815260206004820152603c60248201527f796f752063616e6e6f742073656c6c206d6f7265207468616e20746865206d6160448201527f7820424e4220616d6f756e7420706572207472616e73616374696f6e000000006064820152608401610e50565b600e5460485461380a91606491611fb09190613804906001600160a01b0316611bbe565b90613cce565b84111561381657600080fd5b6048546001600160a01b0386811691161480159061384d57506001600160a01b0385166000908152600a602052604090205460ff16155b156138805760125461386285610e6d88611bbe565b11156138805760405162461bcd60e51b8152600401610e5090615097565b613888614005565b9150600061389530611bbe565b905080156138f15760006138d26138c5603c54610e6d603a54610e6d603654603454612e2690919063ffffffff16565b603a54611fb09085613cce565b90506138dd81614375565b6138ef6138ea8383613d4d565b613e38565b505b4780156139015761390147613b0e565b5050505b6001600160a01b03851660009081526008602052604090205460ff168061394457506001600160a01b03841660009081526008602052604090205460ff165b806139575750604a5462010000900460ff165b8061397a57506001600160a01b0384166000908152600b602052604090205460ff165b8061399d57506001600160a01b0385166000908152600b602052604090205460ff165b156139af576139aa6143d5565b600091505b6001600160a01b03851660009081526041602052604090205460ff16806139ee57506001600160a01b03841660009081526041602052604090205460ff165b15613a5d576139fb6143d5565b613a58602c8054602d908155602a8054602b55602e8054602f5560328054603355603680546037556034805460355560388054603955603c8054603d55978790559486905560009384905591839055849055929092558190559055565b600191505b604a5462010000900460ff1615613ab8576000546001600160a01b0386811691161480613a9757506045546001600160a01b038681169116145b80613aaf57506046546001600160a01b038681169116145b613ab857600080fd5b613ac58585858585614413565b613acd6143d5565b5050505050565b60008184841115613af85760405162461bcd60e51b8152600401610e509190615044565b506000613b058486615345565b95945050505050565b604254603f546001600160a01b03909116906108fc90613b3690606490611fb0908690613cce565b6040518115909202916000818181858888f19350505050158015613b5e573d6000803e3d6000fd5b506043546040546001600160a01b03909116906108fc90613b8790606490611fb0908690613cce565b6040518115909202916000818181858888f19350505050158015613baf573d6000803e3d6000fd5b50604454603e546001600160a01b03909116906108fc90613bd890606490611fb0908690613cce565b6040518115909202916000818181858888f19350505050158015613c00573d6000803e3d6000fd5b5073e01f2d85a7f191acfbd4807c69cfdce5034f8d286108fc613c296064611fb0856005613cce565b6040518115909202916000818181858888f19350505050158015611cca573d6000803e3d6000fd5b6000600c54821115613cb85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e50565b6000613cc26144b3565b9050612e1f8382612ddd565b600082613cdd57506000610ee8565b6000613ce98385615326565b905082613cf6858361520b565b14612e1f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e50565b6000612e1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ad4565b6000306001600160a01b0316634b94f50e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613dca57600080fd5b505afa158015613dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e029190614ea2565b601e8390559050613e186064611fb08385613cce565b601f819055600f55505042601055601155604a805460ff19166001179055565b604a805461ff0019166101001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110613e8a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152604754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613ede57600080fd5b505afa158015613ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f169190614d5d565b81600181518110613f3757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152604754613f5d9130911684612e85565b60475460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f96908590600090869030904290600401615183565b600060405180830381600087803b158015613fb057600080fd5b505af1158015613fc4573d6000803e3d6000fd5b5050604a805461ff001916905550505050565b60008183613ff85760405162461bcd60e51b8152600401610e509190615044565b506000613b05848661520b565b61400d614c71565b614015614c71565b602a548152602c546020808301919091526030546060830152602e54604080840191909152603254608084015260345460a084015260365460c0840152603a5461010084015260385460e0840152603c5461012084015280516325ca7a8760e11b815290516000923092634b94f50e9260048083019392829003018186803b1580156140a057600080fd5b505afa1580156140b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d89190614ea2565b905060195442101580156140ee57506018544211155b156141435760008083526020808401829052606084018290526040840182905260808401919091525460a083015260215460c083015260225461010083015260235460e08301526024546101208301526141ab565b601854421180156141565750601b544211155b156141ab57602a548252602c5460208301526030546060830152602e546040830152603254608083015260255460a083015260265460c083015260275461010083015260285460e08301526029546101208301525b601854421180156141be5750601a5460ff165b156141ce57601a805460ff191690555b6141f56064611fb06141ec601d546064612e2690919063ffffffff16565b600f5490613cce565b811180156142065750601c5460ff16155b80156142155750601a5460ff16155b1561422857601c805460ff191660011790555b600f54811161435f57602a548252602c546020808401919091526030546060840152602e54604084015260325460808401525460a083015260215460c083015260225461010083015260235460e0830152602454610120830152601954421080159061429657506018544211155b156142e75760008083526020808401829052606084018290526040840182905260808401919091525460a083015260215460c083015260225461010083015260235460e08301526024546101208301525b601a5460ff161580156142fc5750601c5460ff165b1561435f576143096144d6565b60008083526020808401829052606084018290526040840182905260808401919091525460a083015260215460c083015260225461010083015260235460e0830152602454610120830152601c805460ff191690555b601f5481111561436f57601f8190555b50919050565b604a805461ff0019166101001790556000614391826002612ddd565b9050600061439f8383613d4d565b9050476143ab83613e38565b60006143b74783613d4d565b90506143c3838261450d565b5050604a805461ff0019169055505050565b602d54602c55602b54602a55602f54602e55603154603055603354603255603754603655603554603455603954603855603b54603a55603d54603c55565b8161445d5760008082526020820181905260608201819052604082018190526080820181905260a0820181905260c08201819052610100820181905260e082018190526101208201525b6048546001600160a01b038681169116148061449157506001600160a01b0385166000908152600a602052604090205460ff165b156144a7576144a2858585846145ea565b613acd565b613acd8585858461471a565b60008060006144c06147fe565b90925090506144cf8282612ddd565b9250505090565b426019819055601a805460ff191660011790556016546144f69190612e26565b60188190556016546145089190612e26565b601b55565b6047546145259030906001600160a01b031684612e85565b6047546001600160a01b031663f305d71982308560008061454e6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156145b157600080fd5b505af11580156145c5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613acd9190614f06565b6145f2614cc4565b6145fc8383614948565b6101008101516001600160a01b0387166000908152600260205260409020549192506146289190613d4d565b6001600160a01b038087166000908152600260205260408082209390935560e08401519187168152919091205461465e91612e26565b6001600160a01b038516600090815260026020908152604090912091909155810151614689906149fb565b61469681604001516149fb565b6146a88160c001518260600151614a45565b6146b581608001516149fb565b6146c28160a001516149fb565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161470b91815260200190565b60405180910390a35050505050565b614722614cc4565b61472c8383614a69565b6101008101516001600160a01b0387166000908152600260205260409020549192506147589190613d4d565b6001600160a01b038087166000908152600260205260408082209390935560e08401519187168152919091205461478e91612e26565b6001600160a01b03851660008181526002602052604090209190915561dead14156147f15780516001600160a01b0385166000908152600360205260409020546147d791612e26565b6001600160a01b0385166000908152600360205260409020555b61468981602001516149fb565b600c5461dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc549091829169d3c21bcecceda100000090821080614878575061dead60005260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c5481105b15614894575050600c549269d3c21bcecceda100000092509050565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546148cc908390613d4d565b61dead60005260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54909250614907908290613d4d565b600c549091506149219069d3c21bcecceda1000000612ddd565b82101561493f575050600c549269d3c21bcecceda100000092509050565b90939092509050565b614950614cc4565b60006149748484600001518560200151866040015187606001518860800151614a93565b905061497e614cc4565b60006149886144b3565b90506149ad8684602001518560400151866060015187608001518860a0015187614bd5565b60c085015260e0840152610100830152506020828101519082015260408083015190820152606080830151908201526080808301519082015260a08083015190820152905181529392505050565b6000614a056144b3565b90506000614a138383613cce565b30600090815260026020526040902054909150614a309082612e26565b30600090815260026020526040902055505050565b600c54614a529083613d4d565b600c55600d54614a629082612e26565b600d555050565b614a71614cc4565b6000614974848460a001518560c001518660e001518761010001518861012001515b614acc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614b056040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614b146064611fb08a8a613cce565b6020820152614b286064611fb08a89613cce565b6040820152614b3c6064611fb08a88613cce565b6060820152614b506064611fb08a87613cce565b6080820152614b646064611fb08a86613cce565b60a082015260408101516020820151614b8391906122f1908b90613d4d565b8082526060820151908290614b99908390615345565b905250608081015181518290614bb0908390615345565b90525060a081015181518290614bc7908390615345565b905250979650505050505050565b6000808080614be48b86613cce565b90506000614bf28b87613cce565b90506000614c008b88613cce565b90506000614c0e8b89613cce565b90506000614c1c8b8a613cce565b90506000614c2a8b8b613cce565b90506000614c3e846122f187818b8b613d4d565b9050614c4a8382615345565b9050614c568282615345565b96995095975091955050505050509750975097945050505050565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516001600160701b03811681146122f757600080fd5b805169ffffffffffffffffffff811681146122f757600080fd5b600060208284031215614d52578081fd5b8135612e1f81615372565b600060208284031215614d6e578081fd5b8151612e1f81615372565b60008060408385031215614d8b578081fd5b8235614d9681615372565b91506020830135614da681615372565b809150509250929050565b600080600060608486031215614dc5578081fd5b8335614dd081615372565b92506020840135614de081615372565b929592945050506040919091013590565b60008060408385031215614e03578182fd5b8235614e0e81615372565b946020939093013593505050565b600060208284031215614e2d578081fd5b81358015158114612e1f578182fd5b600080600060608486031215614e50578283fd5b614e5984614d10565b9250614e6760208501614d10565b9150604084015163ffffffff81168114614e7f578182fd5b809150509250925092565b600060208284031215614e9b578081fd5b5035919050565b600060208284031215614eb3578081fd5b5051919050565b60008060408385031215614ecc578182fd5b50508035926020909101359150565b600080600060608486031215614eef578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215614f1a578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215614f4a578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000806000806000806000806101408b8d031215614f8c578788fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b600080600080600060a08688031215614feb578283fd5b614ff486614d27565b945060208601519350604086015192506060860151915061501760808701614d27565b90509295509295909350565b600060208284031215615034578081fd5b815160ff81168114612e1f578182fd5b6000602080835283518082850152825b8181101561507057858101830151858201604001528201615054565b818111156150815783604083870101525b50601f01601f1916929092016040019392505050565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160408201526f6c20746f20746f74616c537570706c7960801b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156151d25784516001600160a01b0316835293830193918301916001016151ad565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156152065761520661535c565b500190565b60008261522657634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561526657816000190482111561524c5761524c61535c565b8085161561525957918102915b93841c9390800290615230565b509250929050565b6000612e1f8383615285565b6000612e1f60ff8416835b60008261529457506001610ee8565b816152a157506000610ee8565b81600181146152b757600281146152c1576152dd565b6001915050610ee8565b60ff8411156152d2576152d261535c565b50506001821b610ee8565b5060208310610133831016604e8410600b8410161715615300575081810a610ee8565b61530a838361522b565b806000190482111561531e5761531e61535c565b029392505050565b60008160001904831182151516156153405761534061535c565b500290565b6000828210156153575761535761535c565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611bbb57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212207ba6cfac08c6c8d36a00540745b696cfbfaca87fc4434190edfa51e12b0d6cb064736f6c63430008040033

Deployed ByteCode Sourcemap

12873:47629:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57738:573;;;;;;;;;;-1:-1:-1;57738:573:0;;;;;:::i;:::-;;:::i;:::-;;21154:94;;;;;;;;;;-1:-1:-1;21235:5:0;;;;;;;;;;;;-1:-1:-1;;;21235:5:0;;;;21154:94;;;;;;;:::i;:::-;;;;;;;;22045:163;;;;;;;;;;-1:-1:-1;22045:163:0;;;;;:::i;:::-;;:::i;:::-;;;7529:14:1;;7522:22;7504:41;;7492:2;7477:18;22045:163:0;7459:92:1;15058:36:0;;;;;;;;;;;;;;;;;;;19671:25:1;;;19659:2;19644:18;15058:36:0;19626:76:1;50609:107:0;;;;;;;;;;-1:-1:-1;50609:107:0;;;;;:::i;:::-;;:::i;21464:97::-;;;;;;;;;;-1:-1:-1;13874:24:0;21464:97;;58604:142;;;;;;;;;;-1:-1:-1;58604:142:0;;;;;:::i;:::-;;:::i;22216:312::-;;;;;;;;;;-1:-1:-1;22216:312:0;;;;;:::i;:::-;;:::i;54297:108::-;;;;;;;;;;-1:-1:-1;54297:108:0;;;;;:::i;:::-;;:::i;51179:297::-;;;;;;;;;;-1:-1:-1;51179:297:0;;;;;:::i;:::-;;:::i;53821:337::-;;;;;;;;;;-1:-1:-1;53821:337:0;;;;;:::i;:::-;;:::i;15189:38::-;;;;;;;;;;;;;;;;21362:94;;;;;;;;;;-1:-1:-1;21362:94:0;;13110:1;22510:36:1;;22498:2;22483:18;21362:94:0;22465:87:1;55805:102:0;;;;;;;;;;-1:-1:-1;55805:102:0;;;;;:::i;:::-;;:::i;14929:37::-;;;;;;;;;;;;;;;;55919:165;;;;;;;;;;-1:-1:-1;55919:165:0;;;;;:::i;:::-;;:::i;51932:1881::-;;;;;;;;;;-1:-1:-1;51932:1881:0;;;;;:::i;:::-;;:::i;15502:36::-;;;;;;;;;;;;;;;;15835:34;;;;;;;;;;;;;;;;49644:113;;;;;;;;;;-1:-1:-1;49644:113:0;;;;;:::i;:::-;;:::i;50728:110::-;;;;;;;;;;-1:-1:-1;50728:110:0;;;;;:::i;:::-;;:::i;18352:28::-;;;;;;;;;;-1:-1:-1;18352:28:0;;;;-1:-1:-1;;;;;18352:28:0;;;;;;-1:-1:-1;;;;;6708:32:1;;;6690:51;;6678:2;6663:18;18352:28:0;6645:102:1;26032:1023:0;;;;;;;;;;;;;:::i;14973:38::-;;;;;;;;;;;;;;;;14695:29;;;;;;;;;;-1:-1:-1;14695:29:0;;;;;;;;58323:123;;;;;;;;;;-1:-1:-1;58323:123:0;;;;;:::i;:::-;;:::i;55675:122::-;;;;;;;;;;-1:-1:-1;55675:122:0;;;;;:::i;:::-;;:::i;15145:37::-;;;;;;;;;;;;;;;;49887:97;;;;;;;;;;-1:-1:-1;49887:97:0;;;;;:::i;:::-;;:::i;15721:29::-;;;;;;;;;;;;;;;;56096:122;;;;;;;;;;-1:-1:-1;56096:122:0;;;;;:::i;:::-;;:::i;58758:150::-;;;;;;;;;;-1:-1:-1;58758:150:0;;;;;:::i;:::-;;:::i;14135:31::-;;;;;;;;;;;;;;;;19428:76;;;;;;;;;;-1:-1:-1;19428:76:0;;;;-1:-1:-1;;;;;19428:76:0;;;39968:196;;;;;;;;;;;;;:::i;21569:138::-;;;;;;;;;;-1:-1:-1;21569:138:0;;;;;:::i;:::-;;:::i;8446:148::-;;;;;;;;;;;;;:::i;14842:36::-;;;;;;;;;;;;;;;;16051:37;;;;;;;;;;;;;;;;54413:245;;;;;;;;;;-1:-1:-1;54413:245:0;;;;;:::i;:::-;;:::i;50228:124::-;;;;;;;;;;-1:-1:-1;50228:124:0;;;;;:::i;:::-;;:::i;56667:159::-;;;;;;;;;;;;;:::i;56498:157::-;;;;;;;;;;;;;:::i;57153:573::-;;;;;;;;;;-1:-1:-1;57153:573:0;;;;;:::i;:::-;;:::i;16165:36::-;;;;;;;;;;;;;;;;50364:111;;;;;;;;;;-1:-1:-1;50364:111:0;;;;;:::i;:::-;;:::i;58458:134::-;;;;;;;;;;-1:-1:-1;58458:134:0;;;;;:::i;:::-;;:::i;55298:139::-;;;;;;;;;;;;;:::i;8232:79::-;;;;;;;;;;-1:-1:-1;8270:7:0;8297:6;-1:-1:-1;;;;;8297:6:0;8232:79;;25610:367;;;;;;;;;;;;;:::i;:::-;;;;22110:22:1;22159:15;;;22141:34;;22206:2;22191:18;;22184:34;;;;22234:18;;22227:34;;;;22292:2;22277:18;;22270:34;22341:15;;;22335:3;22320:19;;22313:44;22087:3;22072:19;25610:367:0;22054:309:1;58920:239:0;;;;;;;;;;-1:-1:-1;58920:239:0;;;;;:::i;:::-;;:::i;56995:146::-;;;;;;;;;;;;;:::i;21256:98::-;;;;;;;;;;-1:-1:-1;21339:7:0;;;;;;;;;;;;-1:-1:-1;;;21339:7:0;;;;21256:98;;50097:123;;;;;;;;;;-1:-1:-1;50097:123:0;;;;;:::i;:::-;;:::i;15234:31::-;;;;;;;;;;;;;;;;59171:1328;;;;;;;;;;-1:-1:-1;59171:1328:0;;;;;:::i;:::-;;:::i;21715:169::-;;;;;;;;;;-1:-1:-1;21715:169:0;;;;;:::i;:::-;;:::i;15018:31::-;;;;;;;;;;;;;;;;56838:145;;;;;;;;;;;;;:::i;54666:260::-;;;;;;;;;;-1:-1:-1;54666:260:0;;;;;:::i;:::-;;:::i;13994:31::-;;;;;;;;;;;;;;;;50487:114;;;;;;;;;;-1:-1:-1;50487:114:0;;;;;:::i;:::-;;:::i;55449:220::-;;;;;;;;;;-1:-1:-1;55449:220:0;;;;;:::i;:::-;;:::i;15292:33::-;;;;;;;;;;;;;;;;27110:801;;;;;;;;;;-1:-1:-1;27110:801:0;;;;;:::i;:::-;;:::i;39763:197::-;;;;;;;;;;;;;:::i;15394:35::-;;;;;;;;;;;;;;;;15940:36;;;;;;;;;;;;;;;;54934:173;;;;;;;;;;;;;:::i;16276:30::-;;;;;;;;;;;;;;;;14609:38;;;;;;;;;;-1:-1:-1;14609:38:0;;;;;;;;14885:37;;;;;;;;;;;;;;;;15613:35;;;;;;;;;;;;;;;;15101:37;;;;;;;;;;;;;;;;55115:175;;;;;;;;;;;;;:::i;21892:145::-;;;;;;;;;;-1:-1:-1;21892:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;22002:18:0;;;21975:7;22002:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21892:145;49765:114;;;;;;;;;;-1:-1:-1;49765:114:0;;;;;:::i;:::-;;:::i;50850:321::-;;;;;;;;;;-1:-1:-1;50850:321:0;;;;;:::i;:::-;;:::i;51488:436::-;;;;;;;;;;-1:-1:-1;51488:436:0;;;;;:::i;:::-;;:::i;14562:40::-;;;;;;;;;;;;;;;;54166:123;;;;;;;;;;-1:-1:-1;54166:123:0;;;;;:::i;:::-;;:::i;49992:93::-;;;;;;;;;;-1:-1:-1;49992:93:0;;;;;:::i;:::-;;:::i;57738:573::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;;;;;;;;;58033:2:::1;57928:102;58018:11:::0;57928:85:::1;57995:17:::0;57928:85;57971:18;57928:85;:17;57950:15;57928:21:::1;:38::i;:::-;:42:::0;::::1;:62::i;:102::-;:107;57920:152;;;::::0;-1:-1:-1;;;57920:152:0;;8770:2:1;57920:152:0::1;::::0;::::1;8752:21:1::0;;;8789:18;;;8782:30;8848:34;8828:18;;;8821:62;8900:18;;57920:152:0::1;8742:182:1::0;57920:152:0::1;58083:18;:38:::0;;;;58132:16:::1;:34:::0;;;;58177:19:::1;:40:::0;58228:18:::1;:38:::0;58277:12:::1;:26:::0;57738:573::o;22045:163::-;22122:4;22139:39;6033:10;22162:7;22171:6;22139:8;:39::i;:::-;-1:-1:-1;22196:4:0;22045:163;;;;;:::o;50609:107::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50683:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;50683:25:0::1;50704:4;50683:25;::::0;;50609:107::o;58604:142::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;58702:17:::1;:36:::0;;-1:-1:-1;;;;;;58702:36:0::1;-1:-1:-1::0;;;;;58702:36:0;;;::::1;::::0;;;::::1;::::0;;58604:142::o;22216:312::-;22316:4;22333:36;22343:6;22351:9;22362:6;22333:9;:36::i;:::-;22380:118;22389:6;6033:10;22409:88;22447:6;22409:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22409:19:0;;;;;;:11;:19;;;;;;;;6033:10;22409:33;;;;;;;;;;:37;:88::i;:::-;22380:8;:118::i;:::-;-1:-1:-1;22516:4:0;22216:312;;;;;:::o;54297:108::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;54374:16:::1;:23:::0;;-1:-1:-1;;;;;;54374:23:0::1;-1:-1:-1::0;;;;;54374:23:0;;;::::1;::::0;;;::::1;::::0;;54297:108::o;51179:297::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;51290:1:::1;51272:15;:19;51264:61;;;::::0;-1:-1:-1;;;51264:61:0;;10990:2:1;51264:61:0::1;::::0;::::1;10972:21:1::0;11029:2;11009:18;;;11002:30;11068:31;11048:18;;;11041:59;11117:18;;51264:61:0::1;10962:179:1::0;51264:61:0::1;13874:24;51344:15;:26;;51336:87;;;;-1:-1:-1::0;;;51336:87:0::1;;;;;;;:::i;:::-;51434:16;:34:::0;51179:297::o;53821:337::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;53921:3:::1;53906:11;:18;;53898:81;;;::::0;-1:-1:-1;;;53898:81:0;;17708:2:1;53898:81:0::1;::::0;::::1;17690:21:1::0;17747:2;17727:18;;;17720:30;17786:34;17766:18;;;17759:62;-1:-1:-1;;;17837:18:1;;;17830:48;17895:19;;53898:81:0::1;17680:240:1::0;53898:81:0::1;54012:1;53998:11;:15;53990:75;;;::::0;-1:-1:-1;;;53990:75:0;;18548:2:1;53990:75:0::1;::::0;::::1;18530:21:1::0;18587:2;18567:18;;;18560:30;18626:34;18606:18;;;18599:62;-1:-1:-1;;;18677:18:1;;;18670:45;18732:19;;53990:75:0::1;18520:237:1::0;53990:75:0::1;54076:12;:26:::0;;;54118:32:::1;::::0;19671:25:1;;;54118:32:0::1;::::0;19659:2:1;19644:18;54118:32:0::1;;;;;;;;53821:337:::0;:::o;55805:102::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;55878:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;55878:21:0;;::::1;::::0;;;::::1;::::0;;55805:102::o;55919:165::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;56019:10:::1;:22:::0;;;;56052:11:::1;:24:::0;55919:165::o;51932:1881::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;52223:14:::1;52240:56;52279:16:::0;52240:34:::1;:15:::0;52260:13;52240:19:::1;:34::i;:56::-;52223:73:::0;-1:-1:-1;52317:30:0::1;:15:::0;52337:9;52317:19:::1;:30::i;:::-;52307:40;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;52358:15:0::1;52376:59;52417:17:::0;52376:36:::1;:16:::0;52397:14;52376:20:::1;:36::i;:59::-;52358:77:::0;-1:-1:-1;52457:32:0::1;:16:::0;52478:10;52457:20:::1;:32::i;:::-;52446:43;::::0;;::::1;:::i;:::-;;;52517:2;52508:6;:11;52500:61;;;::::0;-1:-1:-1;;;52500:61:0;;14871:2:1;52500:61:0::1;::::0;::::1;14853:21:1::0;14910:2;14890:18;;;14883:30;14949:34;14929:18;;;14922:62;-1:-1:-1;;;15000:18:1;;;14993:35;15045:19;;52500:61:0::1;14843:227:1::0;52500:61:0::1;52590:2;52580:7;:12;52572:61;;;::::0;-1:-1:-1;;;52572:61:0;;19322:2:1;52572:61:0::1;::::0;::::1;19304:21:1::0;19361:2;19341:18;;;19334:30;19400:34;19380:18;;;19373:62;-1:-1:-1;;;19451:18:1;;;19444:34;19495:19;;52572:61:0::1;19294:226:1::0;52572:61:0::1;52644:16;:34:::0;;;52689:14:::1;:30:::0;;;52730:17:::1;:36:::0;;;52777:16:::1;:34:::0;;;52822:10:::1;:22:::0;;;52855:17:::1;:36:::0;;;52902:15:::1;:32:::0;;;52945:18:::1;:38:::0;;;52994:17:::1;:36:::0;;;53041:11:::1;:24:::0;;;53086::::1;:43:::0;;;53140:22:::1;:39:::0;;;53190:25:::1;:45:::0;;;53246:24:::1;:43:::0;;;53300:18:::1;:31:::0;;;53342:25:::1;:45:::0;;;53398:23:::1;:41:::0;;;53450:26:::1;:47:::0;;;53508:25:::1;:45:::0;;;53564:19:::1;:33:::0;;;53623:182:::1;::::0;;21418:25:1;;;21474:2;21459:18;;21452:34;;;21502:18;;;21495:34;;;21560:2;21545:18;;21538:34;;;21603:3;21588:19;;21581:35;;;21647:3;21632:19;;21625:35;;;21691:3;21676:19;;21669:35;;;21735:3;21720:19;;21713:35;;;21779:3;21764:19;;21757:35;;;21823:3;21808:19;;21801:35;;;53623:182:0::1;::::0;21405:3:1;21390:19;53623:182:0::1;;;;;;;8429:1;;51932:1881:::0;;;;;;;;;;:::o;49644:113::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49715:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;49715:34:0::1;49745:4;49715:34;::::0;;49644:113::o;50728:110::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50804:18:0::1;50825:5;50804:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;50804:26:0::1;::::0;;50728:110::o;26032:1023::-;26079:7;26099:21;26153:13;;;;;;;;;-1:-1:-1;;;;;26153:13:0;-1:-1:-1;;;;;26138:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26099:78;;26195:21;26249:13;;;;;;;;;-1:-1:-1;;;;;26249:13:0;-1:-1:-1;;;;;26234:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26195:78;;26290:12;26304;26336:13;;;;;;;;;-1:-1:-1;;;;;26336:13:0;-1:-1:-1;;;;;26321:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26378:11:0;;26289:75;;-1:-1:-1;26289:75:0;-1:-1:-1;26378:11:0;;;;;26375:270;;;26445:13;;;;;;;;;-1:-1:-1;;;;;26445:13:0;-1:-1:-1;;;;;26430:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26406:63;;26530:13;;;;;;;;;-1:-1:-1;;;;;26530:13:0;-1:-1:-1;;;;;26515:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26491:63;;26605:13;;;;;;;;;-1:-1:-1;;;;;26605:13:0;-1:-1:-1;;;;;26590:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26574:59:0;-1:-1:-1;26574:59:0;-1:-1:-1;26375:270:0;26676:14;;26745:18;;-1:-1:-1;;;26745:18:0;;;;26742:94;;;26803:4;-1:-1:-1;;;;;26803:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26780:44:0;;-1:-1:-1;;;;26742:94:0;26846:12;26942:6;-1:-1:-1;;;;;26942:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26934:26;;26913:6;-1:-1:-1;;;;;26913:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26901:30;;26905:26;;26901:2;:30;:::i;:::-;26862:37;26884:14;-1:-1:-1;;;;;26862:13:0;;:37;:::i;:::-;:70;;;;:::i;:::-;26861:99;;;;:::i;:::-;26846:114;-1:-1:-1;26980:18:0;-1:-1:-1;;;;;26985:13:0;;26846:114;26980:18;:::i;:::-;26973:26;;;;;;;;26032:1023;:::o;58323:123::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;58406:15:::1;:32:::0;58323:123::o;55675:122::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;55759:14:::1;:30:::0;55675:122::o;49887:97::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49955:13:0::1;49971:5;49955:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;49955:21:0::1;::::0;;49887:97::o;56096:122::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;56180:17:::1;:30:::0;56096:122::o;58758:150::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;58860:19:::1;:40:::0;;-1:-1:-1;;;;;;58860:40:0::1;-1:-1:-1::0;;;;;58860:40:0;;;::::1;::::0;;;::::1;::::0;;58758:150::o;39968:196::-;40034:17;;-1:-1:-1;;;;;40034:17:0;6033:10;-1:-1:-1;;;;;40018:33:0;;40010:42;;;;;;40092:21;40124:32;40092:21;40124:12;:32::i;:::-;39968:196;:::o;21569:138::-;-1:-1:-1;;;;;21682:16:0;;21635:7;21682:16;;;:7;:16;;;;;;21662:37;;:19;:37::i;8446:148::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;8553:1:::1;8537:6:::0;;8516:40:::1;::::0;-1:-1:-1;;;;;8537:6:0;;::::1;::::0;8516:40:::1;::::0;8553:1;;8516:40:::1;8584:1;8567:19:::0;;-1:-1:-1;;;;;;8567:19:0::1;::::0;;8446:148::o;54413:245::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;54513:13:::1;:22:::0;;-1:-1:-1;;;;;54513:22:0;;::::1;-1:-1:-1::0;;;;;;54513:22:0;;::::1;::::0;::::1;::::0;;;54546:14:::1;:23:::0;;;;::::1;::::0;;;::::1;;::::0;;54580:29:::1;::::0;:14:::1;:29::i;:::-;54635:14;::::0;54620:30:::1;::::0;-1:-1:-1;;;;;54635:14:0::1;54620;:30::i;:::-;54413:245:::0;;:::o;50228:124::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50310:26:0::1;50339:5;50310:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;50310:34:0::1;::::0;;50228:124::o;56667:159::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;56738:20:::1;::::0;;;::::1;;;56730:49;;;::::0;-1:-1:-1;;;56730:49:0;;10645:2:1;56730:49:0::1;::::0;::::1;10627:21:1::0;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:46;10759:18;;56730:49:0::1;10617:166:1::0;56730:49:0::1;56790:20;:28:::0;;-1:-1:-1;;56790:28:0::1;::::0;;56667:159::o;56498:157::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;56569:20:::1;::::0;;;::::1;;;56568:21;56560:49;;;::::0;-1:-1:-1;;;56560:49:0;;14527:2:1;56560:49:0::1;::::0;::::1;14509:21:1::0;14566:2;14546:18;;;14539:30;-1:-1:-1;;;14585:18:1;;;14578:45;14640:18;;56560:49:0::1;14499:165:1::0;56560:49:0::1;56620:20;:27:::0;;-1:-1:-1;;56620:27:0::1;::::0;::::1;::::0;;56498:157::o;57153:573::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;57448:2:::1;57343:102;57433:11:::0;57343:85:::1;57410:17:::0;57343:85;57386:18;57343:85;:17;57365:15;57343:21:::1;:38::i;:102::-;:107;57335:152;;;::::0;-1:-1:-1;;;57335:152:0;;8770:2:1;57335:152:0::1;::::0;::::1;8752:21:1::0;;;8789:18;;;8782:30;8848:34;8828:18;;;8821:62;8900:18;;57335:152:0::1;8742:182:1::0;57335:152:0::1;57498:18;:38:::0;;;;57547:16:::1;:34:::0;;;;57592:19:::1;:40:::0;57643:18:::1;:38:::0;57692:12:::1;:26:::0;57153:573::o;50364:111::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50440:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;50440:27:0::1;50463:4;50440:27;::::0;;50364:111::o;58458:134::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;58552:15:::1;:32:::0;;-1:-1:-1;;;;;;58552:32:0::1;-1:-1:-1::0;;;;;58552:32:0;;;::::1;::::0;;;::::1;::::0;;58458:134::o;55298:139::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;55366:32:::1;55394:3;55366:23;55375:13;;55366:4;;:8;;:23;;;;:::i;:::-;:27:::0;::::1;:32::i;:::-;55350:13;:48:::0;;;55409:4:::1;:20:::0;55298:139::o;25610:367::-;25659:6;25667:3;25672:4;25678;25685:6;25719:14;25748:9;25772:14;25801;25830:22;25866:9;;;;;;;;;-1:-1:-1;;;;;25866:9:0;-1:-1:-1;;;;;25866:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25704:189;;;;-1:-1:-1;25704:189:0;;-1:-1:-1;25704:189:0;-1:-1:-1;25704:189:0;;-1:-1:-1;25610:367:0;-1:-1:-1;;;;;;25610:367:0:o;58920:239::-;59023:16;;58999:7;;-1:-1:-1;;;59023:16:0;;;;59019:98;;;-1:-1:-1;;;;;59085:19:0;;;;;;:10;:19;;;;;;59063:17;;:42;;:21;:42::i;59019:98::-;-1:-1:-1;;59134:17:0;;;58920:239::o;56995:146::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;57062:16:::1;::::0;-1:-1:-1;;;57062:16:0;::::1;;;57054:44;;;::::0;-1:-1:-1;;;57054:44:0;;9131:2:1;57054:44:0::1;::::0;::::1;9113:21:1::0;9170:2;9150:18;;;9143:30;-1:-1:-1;;;9189:18:1;;;9182:45;9244:18;;57054:44:0::1;9103:165:1::0;57054:44:0::1;57109:16;:24:::0;;-1:-1:-1;;57109:24:0::1;::::0;;56995:146::o;50097:123::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50179:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;50179:33:0::1;50208:4;50179:33;::::0;;50097:123::o;59171:1328::-;59265:20;;59241:7;;59265:20;;;;;:41;;;;-1:-1:-1;59290:16:0;;-1:-1:-1;;;59290:16:0;;;;59289:17;59265:41;59261:1231;;;-1:-1:-1;;;;;59326:21:0;;;;;;:12;:21;;;;;;59350:15;-1:-1:-1;59323:172:0;;;-1:-1:-1;;;;;59413:21:0;;;;;;:12;:21;;;;;;59393:42;;:15;;:19;:42::i;59323:172::-;-1:-1:-1;59516:1:0;;59171:1328;-1:-1:-1;59171:1328:0:o;59261:1231::-;59581:20;;;;;;;:40;;;;-1:-1:-1;59605:16:0;;-1:-1:-1;;;59605:16:0;;;;59581:40;59577:915;;;-1:-1:-1;;;;;59664:19:0;;59687:1;59664:19;;;:10;:19;;;;;;59642:17;;:42;;:21;:42::i;:::-;:46;59638:763;;;-1:-1:-1;;;;;59713:21:0;;;;;;:12;:21;;;;;;59737:15;-1:-1:-1;59709:288:0;;;-1:-1:-1;;;;;59784:21:0;;;;;;:12;:21;;;;;;:42;;59810:15;59784:25;:42::i;59638:763::-;-1:-1:-1;;;;;60072:19:0;;;;;;:10;:19;;;;;;:31;;60096:6;60072:23;:31::i;:::-;60054:15;:49;60050:336;;;-1:-1:-1;60135:1:0;;59171:1328;-1:-1:-1;59171:1328:0:o;60050:336::-;-1:-1:-1;;;;;60276:19:0;;;;;;:10;:19;;;;;;60255:63;;60302:15;;60256:40;;60264:6;;60256:19;:40::i;:::-;60255:46;;:63::i;59577:915::-;59171:1328;;;:::o;21715:169::-;21795:4;21812:42;6033:10;21836:9;21847:6;21812:9;:42::i;56838:145::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;56905:16:::1;::::0;-1:-1:-1;;;56905:16:0;::::1;;;56904:17;56896:45;;;::::0;-1:-1:-1;;;56896:45:0;;14527:2:1;56896:45:0::1;::::0;::::1;14509:21:1::0;14566:2;14546:18;;;14539:30;-1:-1:-1;;;14585:18:1;;;14578:45;14640:18;;56896:45:0::1;14499:165:1::0;56896:45:0::1;56952:16;:23:::0;;-1:-1:-1;;56952:23:0::1;-1:-1:-1::0;;;56952:23:0::1;::::0;;56838:145::o;54666:260::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;54767:7:::1;::::0;;;::::1;;;:15;;54778:4;54767:15;54759:49;;;::::0;-1:-1:-1;;;54759:49:0;;11348:2:1;54759:49:0::1;::::0;::::1;11330:21:1::0;11387:2;11367:18;;;11360:30;-1:-1:-1;;;11406:18:1;;;11399:51;11467:18;;54759:49:0::1;11320:171:1::0;54759:49:0::1;54819:7;:15:::0;;-1:-1:-1;;54819:15:0::1;::::0;;54845:36:::1;54857:9:::0;54868:12;54845:11:::1;:36::i;:::-;54910:7;::::0;54897:21:::1;::::0;54910:7;;;::::1;;;7529:14:1::0;7522:22;7504:41;;54897:21:0::1;::::0;7492:2:1;7477:18;54897:21:0::1;;;;;;;54666:260:::0;;:::o;50487:114::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50565:20:0::1;50588:5;50565:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;50565:28:0::1;::::0;;50487:114::o;55449:220::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;55551:1:::1;55536:12;:16;:39;;;;;55572:3;55556:12;:19;;55536:39;55528:94;;;::::0;-1:-1:-1;;;55528:94:0;;11698:2:1;55528:94:0::1;::::0;::::1;11680:21:1::0;11737:2;11717:18;;;11710:30;11776:34;11756:18;;;11749:62;-1:-1:-1;;;11827:18:1;;;11820:40;11877:19;;55528:94:0::1;11670:232:1::0;55528:94:0::1;55633:13;:28:::0;55449:220::o;27110:801::-;27174:7;27194:21;27248:13;;;;;;;;;-1:-1:-1;;;;;27248:13:0;-1:-1:-1;;;;;27233:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27194:78;;27290:21;27344:13;;;;;;;;;-1:-1:-1;;;;;27344:13:0;-1:-1:-1;;;;;27329:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27290:78;;27385:12;27399;27431:13;;;;;;;;;-1:-1:-1;;;;;27431:13:0;-1:-1:-1;;;;;27416:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;27473:11:0;;27384:75;;-1:-1:-1;27384:75:0;-1:-1:-1;27473:11:0;;;;;27470:270;;;27540:13;;;;;;;;;-1:-1:-1;;;;;27540:13:0;-1:-1:-1;;;;;27525:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27501:63;;27625:13;;;;;;;;;-1:-1:-1;;;;;27625:13:0;-1:-1:-1;;;;;27610:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27586:63;;27700:13;;;;;;;;;-1:-1:-1;;;;;27700:13:0;-1:-1:-1;;;;;27685:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;27669:59:0;-1:-1:-1;27669:59:0;-1:-1:-1;27470:270:0;27752:9;27774:6;-1:-1:-1;;;;;27774:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27770:21;;:2;:21;:::i;:::-;27764:28;;-1:-1:-1;;;;;27764:28:0;;;:::i;:::-;27752:40;;27835:6;-1:-1:-1;;;;;27835:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27831:21;;:2;:21;:::i;:::-;27825:28;;-1:-1:-1;;;;;27825:28:0;;;:::i;:::-;27811:11;27818:4;27811:6;:11;:::i;:::-;27810:44;;;;:::i;:::-;27803:52;27110:801;-1:-1:-1;;;;;;;27110:801:0:o;39763:197::-;39829:17;;-1:-1:-1;;;;;39829:17:0;6033:10;-1:-1:-1;;;;;39813:33:0;;39805:42;;;;;;39858:23;39884:24;39902:4;39884:9;:24::i;:::-;39858:50;;39919:33;39936:15;39919:16;:33::i;54934:173::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;55003:18:::1;::::0;-1:-1:-1;;;55003:18:0;::::1;;;:27;54995:68;;;::::0;-1:-1:-1;;;54995:68:0;;17351:2:1;54995:68:0::1;::::0;::::1;17333:21:1::0;17390:2;17370:18;;;17363:30;17429;17409:18;;;17402:58;17477:18;;54995:68:0::1;17323:178:1::0;54995:68:0::1;55074:18;:25:::0;;-1:-1:-1;;;;55074:25:0::1;-1:-1:-1::0;;;55074:25:0::1;::::0;;54934:173::o;55115:175::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;55185:18:::1;::::0;-1:-1:-1;;;55185:18:0;::::1;;;:26;;55207:4;55185:26;55177:68;;;::::0;-1:-1:-1;;;55177:68:0;;12109:2:1;55177:68:0::1;::::0;::::1;12091:21:1::0;12148:2;12128:18;;;12121:30;12187:31;12167:18;;;12160:59;12236:18;;55177:68:0::1;12081:179:1::0;55177:68:0::1;55256:18;:26:::0;;-1:-1:-1;;;;55256:26:0::1;::::0;;55115:175::o;49765:114::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49836:27:0::1;49866:5;49836:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;49836:35:0::1;::::0;;49765:114::o;50850:321::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;50949:1:::1;50935:11;:15;50927:57;;;::::0;-1:-1:-1;;;50927:57:0;;10990:2:1;50927:57:0::1;::::0;::::1;10972:21:1::0;11029:2;11009:18;;;11002:30;11068:31;11048:18;;;11041:59;11117:18;;50927:57:0::1;10962:179:1::0;50927:57:0::1;13874:24;51003:11;:22;;50995:83;;;;-1:-1:-1::0;;;50995:83:0::1;;;;;;;:::i;:::-;51089:12;:26:::0;;;51131:32:::1;::::0;19671:25:1;;;51131:32:0::1;::::0;19659:2:1;19644:18;51131:32:0::1;19626:76:1::0;51488:436:0;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;51619:52:::1;51660:10:::0;51619:36:::1;:16:::0;51640:14;51619:20:::1;:36::i;:52::-;51675:2;51619:58;51611:100;;;::::0;-1:-1:-1;;;51611:100:0;;18964:2:1;51611:100:0::1;::::0;::::1;18946:21:1::0;19003:2;18983:18;;;18976:30;19042:31;19022:18;;;19015:59;19091:18;;51611:100:0::1;18936:179:1::0;51611:100:0::1;51722:17;:36:::0;;;51769:15:::1;:32:::0;;;51812:11:::1;:24:::0;;;51852:64;;20897:25:1;;;20953:2;20938:18;;20931:34;;;20981:18;;;20974:34;;;51852:64:0::1;::::0;20885:2:1;20870:18;51852:64:0::1;;;;;;;51488:436:::0;;;:::o;54166:123::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;54259:14:::1;:3:::0;54267:5:::1;54259:7;:14::i;:::-;54238;:36:::0;-1:-1:-1;54166:123:0:o;49992:93::-;8359:6;;-1:-1:-1;;;;;8359:6:0;6033:10;8359:22;8351:67;;;;-1:-1:-1;;;8351:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50057:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;50057:20:0::1;50073:4;50057:20;::::0;;49992:93::o;7542:132::-;7600:7;7627:39;7631:1;7634;7627:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7620:46;7542:132;-1:-1:-1;;;7542:132:0:o;6759:179::-;6817:7;;6849:5;6853:1;6849;:5;:::i;:::-;6837:17;;6878:1;6873;:6;;6865:46;;;;-1:-1:-1;;;6865:46:0;;10289:2:1;6865:46:0;;;10271:21:1;10328:2;10308:18;;;10301:30;10367:29;10347:18;;;10340:57;10414:18;;6865:46:0;10261:177:1;25216:335:0;-1:-1:-1;;;;;25309:19:0;;25301:68;;;;-1:-1:-1;;;25301:68:0;;16946:2:1;25301:68:0;;;16928:21:1;16985:2;16965:18;;;16958:30;17024:34;17004:18;;;16997:62;-1:-1:-1;;;17075:18:1;;;17068:34;17119:19;;25301:68:0;16918:226:1;25301:68:0;-1:-1:-1;;;;;25388:21:0;;25380:68;;;;-1:-1:-1;;;25380:68:0;;9886:2:1;25380:68:0;;;9868:21:1;9925:2;9905:18;;;9898:30;9964:34;9944:18;;;9937:62;-1:-1:-1;;;10015:18:1;;;10008:32;10057:19;;25380:68:0;9858:224:1;25380:68:0;-1:-1:-1;;;;;25459:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25511:32;;19671:25:1;;;25511:32:0;;19644:18:1;25511:32:0;;;;;;;25216:335;;;:::o;32514:4679::-;-1:-1:-1;;;;;32602:18:0;;32594:68;;;;-1:-1:-1;;;32594:68:0;;16540:2:1;32594:68:0;;;16522:21:1;16579:2;16559:18;;;16552:30;16618:34;16598:18;;;16591:62;-1:-1:-1;;;16669:18:1;;;16662:35;16714:19;;32594:68:0;16512:227:1;32594:68:0;-1:-1:-1;;;;;32681:16:0;;32673:64;;;;-1:-1:-1;;;32673:64:0;;8366:2:1;32673:64:0;;;8348:21:1;8405:2;8385:18;;;8378:30;8444:34;8424:18;;;8417:62;-1:-1:-1;;;8495:18:1;;;8488:33;8538:19;;32673:64:0;8338:225:1;32673:64:0;32765:1;32756:6;:10;32748:64;;;;-1:-1:-1;;;32748:64:0;;14117:2:1;32748:64:0;;;14099:21:1;14156:2;14136:18;;;14129:30;14195:34;14175:18;;;14168:62;-1:-1:-1;;;14246:18:1;;;14239:39;14295:19;;32748:64:0;14089:231:1;32748:64:0;32840:4;32865:28;;:::i;:::-;8270:7;8297:6;-1:-1:-1;;;;;32910:15:0;;;8297:6;;32910:15;;;;:32;;-1:-1:-1;8270:7:0;8297:6;-1:-1:-1;;;;;32929:13:0;;;8297:6;;32929:13;;32910:32;:44;;;;-1:-1:-1;32947:7:0;;;;;;;32946:8;32910:44;:72;;;;-1:-1:-1;;;;;;32959:23:0;;;;;;:17;:23;;;;;;;;32958:24;32910:72;:98;;;;-1:-1:-1;;;;;;32987:21:0;;;;;;:17;:21;;;;;;;;32986:22;32910:98;:123;;;;-1:-1:-1;;;;;;33012:21:0;;33028:4;33012:21;;32910:123;:146;;;;-1:-1:-1;;;;;;33037:19:0;;33051:4;33037:19;;32910:146;32906:3729;;;33081:11;;;;33073:20;;;;;;33120:13;;-1:-1:-1;;;;;33112:21:0;;;33120:13;;33112:21;;;;:47;;-1:-1:-1;33145:14:0;;-1:-1:-1;;;;;33137:22:0;;;33145:14;;33137:22;;33112:47;33108:119;;;33198:12;;33188:6;:22;;33180:31;;;;;;33254:13;;-1:-1:-1;;;;;33246:21:0;;;33254:13;;33246:21;;:42;;-1:-1:-1;;;;;;33271:17:0;;;;;;:11;:17;;;;;;;;33246:42;33245:78;;;;-1:-1:-1;33307:15:0;;-1:-1:-1;;;;;33293:30:0;;;33307:15;;33293:30;;33245:78;:98;;;;-1:-1:-1;;;;;;33328:15:0;;;;;;:11;:15;;;;;;;;33327:16;33245:98;33241:729;;;33409:10;;33393:11;;:27;;:15;:27::i;:::-;33374:15;:46;;:71;;;;-1:-1:-1;33432:13:0;;-1:-1:-1;;;;;33424:21:0;;;33432:13;;33424:21;;33374:71;:97;;;;-1:-1:-1;33457:14:0;;-1:-1:-1;;;;;33449:22:0;;;33457:14;;33449:22;;33374:97;33370:161;;;-1:-1:-1;;;;;33496:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;33496:15:0;33507:4;33496:15;;;33370:161;33587:29;;-1:-1:-1;;;33587:29:0;;;;;19671:25:1;;;33567:17:0;;33587:4;;:21;;19644:18:1;;33587:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33567:49;;33674:10;;33661:9;:23;;33653:80;;;;-1:-1:-1;;;33653:80:0;;12941:2:1;33653:80:0;;;12923:21:1;12980:2;12960:18;;;12953:30;13019:34;12999:18;;;12992:62;-1:-1:-1;;;13070:18:1;;;13063:42;13122:19;;33653:80:0;12913:234:1;33653:80:0;33789:16;;33760:25;33778:6;33760:13;33770:2;33760:9;:13::i;:25::-;:45;;33752:123;;;;-1:-1:-1;;;33752:123:0;;;;;;;:::i;:::-;33925:11;:9;:11::i;:::-;33912:24;;33241:729;;34003:6;;;;;;;34002:7;:32;;;;-1:-1:-1;34021:13:0;;-1:-1:-1;;;;;34013:21:0;;;34021:13;;34013:21;;34002:32;:54;;;;-1:-1:-1;;;;;;34039:17:0;;;;;;:11;:17;;;;;;;;34038:18;34002:54;33998:2626;;;-1:-1:-1;;;;;34105:10:0;;;;;;:4;:10;;;;;;;;34104:11;:24;;;;-1:-1:-1;;;;;;34120:8:0;;;;;;:4;:8;;;;;;;;34119:9;34104:24;34096:33;;;;;;-1:-1:-1;;;;;34171:15:0;;;;;;:9;:15;;;;;;;;34170:16;:34;;;;-1:-1:-1;;;;;;34191:13:0;;;;;;:9;:13;;;;;;;;34190:14;34170:34;34166:2443;;;34240:13;;-1:-1:-1;;;;;34234:19:0;;;34240:13;;34234:19;;:38;;-1:-1:-1;;;;;;34257:15:0;;;;;;:11;:15;;;;;;;;34234:38;34233:64;;;;-1:-1:-1;34277:20:0;;;;;;;34233:64;34229:250;;;-1:-1:-1;;;;;34334:18:0;;;;;;:12;:18;;;;;;34355:15;-1:-1:-1;34326:45:0;;;;;;34439:15;;34419:36;;:15;;:19;:36::i;:::-;-1:-1:-1;;;;;34398:18:0;;;;;;:12;:18;;;;;:57;34229:250;34543:29;;-1:-1:-1;;;34543:29:0;;;;;19671:25:1;;;34523:17:0;;34543:4;;:21;;19644:18:1;;34543:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34523:49;;34638:11;;34625:9;:24;;34617:85;;;;-1:-1:-1;;;34617:85:0;;16123:2:1;34617:85:0;;;16105:21:1;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;-1:-1:-1;;;16252:18:1;;;16245:46;16308:19;;34617:85:0;16095:238:1;34617:85:0;34750:16;;-1:-1:-1;;;34750:16:0;;;;34747:649;;;-1:-1:-1;;;;;34818:16:0;;;;;;:10;:16;;;;;;34839:6;;34798:37;;:15;;:19;:37::i;:::-;:48;34795:197;;;-1:-1:-1;;;;;34879:16:0;;;;;;:10;:16;;;;;;;;34898:15;34879:34;;34944:10;:16;;;;;:20;34795:197;35061:17;;-1:-1:-1;;;;;35026:16:0;;;;;;:10;:16;;;;;;:31;;35047:9;35026:20;:31::i;:::-;:52;;35018:117;;;;-1:-1:-1;;;35018:117:0;;18127:2:1;35018:117:0;;;18109:21:1;18166:2;18146:18;;;18139:30;18205:34;18185:18;;;18178:62;-1:-1:-1;;;18256:18:1;;;18249:50;18316:19;;35018:117:0;18099:242:1;35018:117:0;-1:-1:-1;;;;;35162:16:0;;;;;;:10;:16;;;;;:29;;35182:9;;35162:16;:29;;35182:9;;35162:29;:::i;:::-;;;;-1:-1:-1;34747:649:0;;-1:-1:-1;34747:649:0;;35290:17;;35277:9;:30;;35269:103;;;;-1:-1:-1;;;35269:103:0;;15277:2:1;35269:103:0;;;15259:21:1;15316:2;15296:18;;;15289:30;15355:34;15335:18;;;15328:62;15426:30;15406:18;;;15399:58;15474:19;;35269:103:0;15249:250:1;35269:103:0;35487:12;;35468:13;;35458:51;;35505:3;;35458:42;;35487:12;35458:24;;-1:-1:-1;;;;;35468:13:0;35458:9;:24::i;:::-;:28;;:42::i;:51::-;35448:6;:61;;35440:70;;;;;;35586:13;;-1:-1:-1;;;;;35580:19:0;;;35586:13;;35580:19;;;;:39;;-1:-1:-1;;;;;;35604:15:0;;;;;;:11;:15;;;;;;;;35603:16;35580:39;35577:218;;;35685:16;;35656:25;35674:6;35656:13;35666:2;35656:9;:13::i;:25::-;:45;;35648:123;;;;-1:-1:-1;;;35648:123:0;;;;;;;:::i;:::-;35832:11;:9;:11::i;:::-;35819:24;;35888:28;35919:24;35937:4;35919:9;:24::i;:::-;35888:55;-1:-1:-1;35970:24:0;;35966:393;;36025:20;36048:127;36096:78;36162:11;;36096:61;36139:17;;36096:38;36116:17;;36096:15;;:19;;:38;;;;:::i;:78::-;36048:17;;:43;;36070:20;36048:21;:43::i;:127::-;36025:150;;36202:28;36217:12;36202:14;:28::i;:::-;36279:56;36296:38;:20;36321:12;36296:24;:38::i;:::-;36279:16;:56::i;:::-;35966:393;;36410:21;36458:22;;36454:114;;36509:35;36522:21;36509:12;:35::i;:::-;34166:2443;;;;-1:-1:-1;;;;;36651:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;36679:22:0;;;;;;:18;:22;;;;;;;;36651:50;:61;;;-1:-1:-1;36705:7:0;;;;;;;36651:61;:78;;;-1:-1:-1;;;;;;36716:13:0;;;;;;:9;:13;;;;;;;;36651:78;:97;;;-1:-1:-1;;;;;;36733:15:0;;;;;;:9;:15;;;;;;;;36651:97;36647:175;;;36765:15;:13;:15::i;:::-;36805:5;36795:15;;36647:175;-1:-1:-1;;;;;36838:10:0;;;;;;:4;:10;;;;;;;;;:22;;-1:-1:-1;;;;;;36852:8:0;;;;;;:4;:8;;;;;;;;36838:22;36834:125;;;36877:15;:13;:15::i;:::-;36907:11;24001:16;;;23974:24;:43;;;24053:14;;;24028:22;:39;24106:17;;;24078:25;:45;24155:10;;;24134:18;:31;24206:17;;;24178:25;:45;24260:15;;;24234:23;:41;24315:18;;;24286:26;:47;24366:11;;;24344:19;:33;24390:21;;;;24422:19;;;;-1:-1:-1;24452:21:0;;;;24484:14;;;;24511:22;;;24544:20;;;;24575:22;;;24608:15;;23934:697;36907:11;36943:4;36933:14;;36834:125;36975:7;;;;;;;36971:115;;;8270:7;8297:6;-1:-1:-1;;;;;37007:15:0;;;8297:6;;37007:15;;:40;;-1:-1:-1;37034:13:0;;-1:-1:-1;;;;;37026:21:0;;;37034:13;;37026:21;37007:40;:66;;;-1:-1:-1;37059:14:0;;-1:-1:-1;;;;;37051:22:0;;;37059:14;;37051:22;37007:66;36999:75;;;;;;37106:53;37121:4;37127:2;37131:6;37139:7;37148:10;37106:14;:53::i;:::-;37170:15;:13;:15::i;:::-;32514:4679;;;;;:::o;7090:190::-;7176:7;7212:12;7204:6;;;;7196:29;;;;-1:-1:-1;;;7196:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7236:9:0;7248:5;7252:1;7248;:5;:::i;:::-;7236:17;7090:190;-1:-1:-1;;;;;7090:190:0:o;39018:367::-;39075:17;;39113;;-1:-1:-1;;;;;39075:17:0;;;;:66;;39102:38;;39136:3;;39102:29;;:6;;:10;:29::i;:38::-;39075:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39152:15:0;;39188;;-1:-1:-1;;;;;39152:15:0;;;;:62;;39177:36;;39209:3;;39177:27;;:6;;:10;:27::i;:36::-;39152:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39225:19:0;;39265:11;;-1:-1:-1;;;;;39225:19:0;;;;:62;;39254:32;;39282:3;;39254:23;;:6;;:10;:23::i;:32::-;39225:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17970:42:0;39298:79;39328:48;39372:3;39328:39;:6;16807:1;39328:10;:39::i;:48::-;39298:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22536:253;22604:7;22643;;22632;:18;;22624:72;;;;-1:-1:-1;;;22624:72:0;;9475:2:1;22624:72:0;;;9457:21:1;9514:2;9494:18;;;9487:30;9553:34;9533:18;;;9526:62;-1:-1:-1;;;9604:18:1;;;9597:40;9654:19;;22624:72:0;9447:232:1;22624:72:0;22707:19;22729:10;:8;:10::i;:::-;22707:32;-1:-1:-1;22757:24:0;:7;22707:32;22757:11;:24::i;7288:246::-;7346:7;7370:6;7366:47;;-1:-1:-1;7400:1:0;7393:8;;7366:47;7423:9;7435:5;7439:1;7435;:5;:::i;:::-;7423:17;-1:-1:-1;7468:1:0;7459:5;7463:1;7423:17;7459:5;:::i;:::-;:10;7451:56;;;;-1:-1:-1;;;7451:56:0;;13354:2:1;7451:56:0;;;13336:21:1;13393:2;13373:18;;;13366:30;13432:34;13412:18;;;13405:62;-1:-1:-1;;;13483:18:1;;;13476:31;13524:19;;7451:56:0;13326:223:1;6946:136:0;7004:7;7031:43;7035:1;7038;7031:43;;;;;;;;;;;;;;;;;:3;:43::i;39393:362::-;39474:20;39497:4;-1:-1:-1;;;;;39497:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39528:13;:28;;;39474:43;-1:-1:-1;39574:40:0;39610:3;39574:31;39474:43;39544:12;39574:16;:31::i;:40::-;39567:4;:47;;;39625:13;:20;-1:-1:-1;;39670:15:0;-1:-1:-1;39656:29:0;39696:10;:22;39729:11;:18;;-1:-1:-1;;39729:18:0;39743:4;39729:18;;;39393:362::o;37201:407::-;19809:6;:13;;-1:-1:-1;;19809:13:0;;;;;37303:16:::1;::::0;;37317:1:::1;37303:16:::0;;;;;::::1;::::0;;-1:-1:-1;;37303:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;37303:16:0::1;37279:40;;37348:4;37330;37335:1;37330:7;;;;;;-1:-1:-1::0;;;37330:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;37330:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;37374:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;37374:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;37330:7;;37374:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37364:4;37369:1;37364:7;;;;;;-1:-1:-1::0;;;37364:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;37364:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;37439:15:::1;::::0;37407:62:::1;::::0;37424:4:::1;::::0;37439:15:::1;37457:11:::0;37407:8:::1;:62::i;:::-;37480:15;::::0;:120:::1;::::0;-1:-1:-1;;;37480:120:0;;-1:-1:-1;;;;;37480:15:0;;::::1;::::0;:66:::1;::::0;:120:::1;::::0;37547:11;;37480:15:::1;::::0;37563:4;;37577::::1;::::0;37584:15:::1;::::0;37480:120:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19845:6:0;:14;;-1:-1:-1;;19845:14:0;;;-1:-1:-1;;;;37201:407:0:o;7682:189::-;7768:7;7803:12;7796:5;7788:28;;;;-1:-1:-1;;;7788:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7827:9:0;7839:5;7843:1;7839;:5;:::i;27923:4579::-;27960:17;;:::i;:::-;28000:28;;:::i;:::-;28076:14;;28049:41;;28130:16;;28101:26;;;;:45;;;;28186:16;;28157:26;;;:45;28243:17;;28213:27;;;;:47;;;;28294:10;;28271:20;;;:33;28353:15;;28325:25;;;:43;28409:17;;28379:27;;;:47;28467:17;;28437:27;;;:47;28526:18;;28495:28;;;:49;28579:11;;28555:21;;;:35;28634:20;;-1:-1:-1;;;28634:20:0;;;;28049:24;;28634:4;;:18;;:20;;;;;28101:26;28634:20;;;;;:4;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28611:43;;28689:21;;28670:15;:40;;:80;;;;;28733:17;;28714:15;:36;;28670:80;28667:1336;;;28794:1;28767:28;;;28810:26;;;;:30;;;28855:26;;;:30;;;28900:27;;;:31;;;28946:20;;;:24;;;;29027:16;28999:25;;;:44;29088:18;;29058:27;;;:48;29151:18;;29121:27;;;:48;29215:19;;29184:28;;;:50;29273:12;;29249:21;;;:36;28667:1336;;;29334:17;;29316:15;:35;:72;;;;;29374:14;;29355:15;:33;;29316:72;29312:691;;;29432:14;;29405:41;;29490:16;;29461:26;;;:45;29550:16;;29521:26;;;:45;29611:17;;29581:27;;;:47;29666:10;;29643:20;;;:33;29733:16;;29705:25;;;:44;29794:18;;29764:27;;;:48;29857:18;;29827:27;;;:48;29921:19;;29890:28;;;:50;29979:12;;29955:21;;;:36;29312:691;30035:17;;30017:15;:35;:57;;;;-1:-1:-1;30056:18:0;;;;30017:57;30013:116;;;30091:18;:26;;-1:-1:-1;;30091:26:0;;;30013:116;30158:56;30210:3;30158:47;30176:28;30193:10;;30184:3;30176:16;;:28;;;;:::i;:::-;30158:13;;;:17;:47::i;:56::-;30143:12;:71;:86;;;;-1:-1:-1;30219:10:0;;;;30218:11;30143:86;:109;;;;-1:-1:-1;30234:18:0;;;;30233:19;30143:109;30139:159;;;30269:10;:17;;-1:-1:-1;;30269:17:0;30282:4;30269:17;;;30139:159;30328:13;;30312:12;:29;30308:2068;;30385:14;;30358:41;;30443:16;;30414:26;;;;:45;;;;30503:16;;30474:26;;;:45;30564:17;;30534:27;;;:47;30619:10;;30596:20;;;:33;30682:16;30654:25;;;:44;30743:18;;30713:27;;;:48;30806:18;;30776:27;;;:48;30870:19;;30839:28;;;:50;30928:12;;30904:21;;;:36;30991:21;;30972:15;:40;;;;:80;;;31035:17;;31016:15;:36;;30972:80;30969:678;;;31100:1;31073:28;;;31120:26;;;;:30;;;31169:26;;;:30;;;31218:27;;;:31;;;31268:20;;;:24;;;;31357:16;31329:25;;;:44;31422:18;;31392:27;;;:48;31489:18;;31459:27;;;:48;31557:19;;31526:28;;;:50;31619:12;;31595:21;;;:36;30969:678;31665:18;;;;31664:19;:33;;;;-1:-1:-1;31687:10:0;;;;31664:33;31661:704;;;31718:17;:15;:17::i;:::-;31781:1;31754:28;;;31801:26;;;;:30;;;31850:26;;;:30;;;31899:27;;;:31;;;31949:20;;;:24;;;;32038:16;32010:25;;;:44;32103:18;;32073:27;;;:48;32170:18;;32140:27;;;:48;32238:19;;32207:28;;;:50;32300:12;;32276:21;;;:36;32331:10;:18;;-1:-1:-1;;32331:18:0;;;31661:704;32405:4;;32390:12;:19;32386:71;;;32426:4;:19;;;32386:71;-1:-1:-1;32484:10:0;27923:4579;-1:-1:-1;27923:4579:0:o;38090:920::-;19809:6;:13;;-1:-1:-1;;19809:13:0;;;;;;38241:27:::1;:20:::0;38266:1:::1;38241:24;:27::i;:::-;38226:42:::0;-1:-1:-1;38279:17:0::1;38299:30;:20:::0;38226:42;38299:24:::1;:30::i;:::-;38279:50:::0;-1:-1:-1;38632:21:0::1;38698:22;38715:4:::0;38698:16:::1;:22::i;:::-;38851:18;38872:41;:21;38898:14:::0;38872:25:::1;:41::i;:::-;38851:62;;38967:35;38980:9;38991:10;38967:12;:35::i;:::-;-1:-1:-1::0;;19845:6:0;:14;;-1:-1:-1;;19845:14:0;;;-1:-1:-1;;;38090:920:0:o;24643:565::-;24706:24;;24687:16;:43;24758:22;;24741:14;:39;24811:25;;24791:17;:45;24866:24;;24847:16;:43;24914:18;;24901:10;:31;24965:25;;24945:17;:45;25019:23;;25001:15;:41;25074:26;;25053:18;:47;25131:25;;25111:17;:45;25181:19;;25167:11;:33;24643:565::o;40172:920::-;40315:7;40310:526;;40371:1;40344:28;;;40391:26;;;:30;;;40440:26;;;:30;;;40489:27;;;:31;;;40539:20;;;:24;;;40600:25;;;:29;;;40648:27;;;:31;;;40698:27;;;:31;;;40748:28;;;:32;;;40799:21;;;:25;40310:526;40860:13;;-1:-1:-1;;;;;40850:23:0;;;40860:13;;40850:23;;:46;;-1:-1:-1;;;;;;40877:19:0;;;;;;:11;:19;;;;;;;;40850:46;40846:239;;;40912:59;40933:6;40941:9;40952:6;40960:10;40912:20;:59::i;:::-;40846:239;;;41013:60;41035:6;41043:9;41054:6;41062:10;41013:21;:60::i;48989:164::-;49031:7;49052:15;49069;49088:19;:17;:19::i;:::-;49051:56;;-1:-1:-1;49051:56:0;-1:-1:-1;49125:20:0;49051:56;;49125:11;:20::i;:::-;49118:27;;;;48989:164;:::o;56230:260::-;56300:15;56276:21;:39;;;56326:18;:25;;-1:-1:-1;;56326:25:0;56347:4;56326:25;;;56402:14;;56382:35;;56300:15;56382:19;:35::i;:::-;56362:17;:55;;;56467:14;;56445:37;;56362:55;56445:21;:37::i;:::-;56428:14;:54;56230:260::o;37620:460::-;37733:15;;37701:62;;37718:4;;-1:-1:-1;;;;;37733:15:0;37751:11;37701:8;:62::i;:::-;37806:15;;-1:-1:-1;;;;;37806:15:0;:31;37845:9;37880:4;37902:11;37806:15;;38020:7;8270;8297:6;-1:-1:-1;;;;;8297:6:0;;8232:79;38020:7;37806:266;;;;;;-1:-1:-1;;;;;;37806:266:0;;;-1:-1:-1;;;;;7111:15:1;;;37806:266:0;;;7093:34:1;7143:18;;;7136:34;;;;7186:18;;;7179:34;;;;7229:18;;;7222:34;7293:15;;;7272:19;;;7265:44;38044:15:0;7325:19:1;;;7318:35;7027:19;;37806:266:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41100:658::-;41231:24;;:::i;:::-;41276:34;41290:7;41299:10;41276:13;:34::i;:::-;41359:15;;;;-1:-1:-1;;;;;41339:15:0;;;;;;:7;:15;;;;;;41266:44;;-1:-1:-1;41339:36:0;;:15;:19;:36::i;:::-;-1:-1:-1;;;;;41321:15:0;;;;;;;:7;:15;;;;;;:54;;;;41430:23;;;;41407:18;;;;;;;;;;:47;;:22;:47::i;:::-;-1:-1:-1;;;;;41386:18:0;;;;;;:7;:18;;;;;;;;:68;;;;41478:16;;;41465:30;;:12;:30::i;:::-;41506:34;41521:7;:18;;;41506:14;:34::i;:::-;41551:53;41563:7;:19;;;41584:7;:19;;;41551:11;:53::i;:::-;41615:34;41630:7;:18;;;41615:14;:34::i;:::-;41660:22;41669:7;:12;;;41660:8;:22::i;:::-;41715:9;-1:-1:-1;;;;;41698:52:0;41707:6;-1:-1:-1;;;;;41698:52:0;;41726:7;:23;;;41698:52;;;;19671:25:1;;19659:2;19644:18;;19626:76;41698:52:0;;;;;;;;41100:658;;;;;:::o;41766:808::-;41898:25;;:::i;:::-;41945:35;41960:7;41969:10;41945:14;:35::i;:::-;42029:16;;;;-1:-1:-1;;;;;42009:15:0;;;;;;:7;:15;;;;;;41934:46;;-1:-1:-1;42009:37:0;;:15;:19;:37::i;:::-;-1:-1:-1;;;;;41991:15:0;;;;;;;:7;:15;;;;;;:55;;;;42101:24;;;;42078:18;;;;;;;;;;:48;;:22;:48::i;:::-;-1:-1:-1;;;;;42057:18:0;;;;;;:7;:18;;;;;:69;;;;18180:42;42141:25;42137:127;;;42227:24;;-1:-1:-1;;;;;42204:18:0;;42227:24;42204:18;;;:7;:18;;;;;;:48;;:22;:48::i;:::-;-1:-1:-1;;;;;42183:18:0;;;;;;:7;:18;;;;;:69;42137:127;42274:31;42287:8;:17;;;42274:12;:31::i;49161:475::-;49259:7;;18180:42;49212:7;49317:21;;;:7;:21;;;;49212:7;;;;13874:24;;49317:31;-1:-1:-1;49317:31:0;:66;;-1:-1:-1;18180:42:0;49352:21;;:7;:21;;;;:31;-1:-1:-1;49317:66:0;49313:97;;;-1:-1:-1;;49393:7:0;;;13874:24;;-1:-1:-1;49161:475:0;-1:-1:-1;49161:475:0:o;49313:97::-;18180:42;49443:21;;:7;:21;;;;49431:34;;:7;;:11;:34::i;:::-;18180:42;49498:21;;:7;:21;;;;49421:44;;-1:-1:-1;49486:34:0;;:7;;:11;:34::i;:::-;49545:7;;49476:44;;-1:-1:-1;49545:20:0;;13874:24;49545:11;:20::i;:::-;49535:7;:30;49531:61;;;-1:-1:-1;;49575:7:0;;;13874:24;;-1:-1:-1;49161:475:0;-1:-1:-1;49161:475:0:o;49531:61::-;49611:7;;49620;;-1:-1:-1;49161:475:0;-1:-1:-1;49161:475:0:o;46408:944::-;46500:16;;:::i;:::-;46529:27;46559:156;46574:7;46583:10;:24;;;46609:10;:26;;;46637:10;:27;;;46666:10;:26;;;46694:10;:20;;;46559:14;:156::i;:::-;46529:186;;46726:26;;:::i;:::-;46763:19;46785:10;:8;:10::i;:::-;46763:32;;46878:129;46893:7;46902;:16;;;46920:7;:18;;;46940:7;:19;;;46961:7;:18;;;46981:7;:12;;;46995:11;46878:14;:129::i;:::-;46853:21;;;46806:201;46826:25;;;46806:201;46807:17;;;46806:201;-1:-1:-1;47039:16:0;;;;;47018:18;;;:37;47089:18;;;;;47066:20;;;:41;47142:19;;;;;47118:21;;;:43;-1:-1:-1;47195:18:0;;;;47172:20;;;:41;-1:-1:-1;47241:12:0;;;;47224:14;;;:29;47292:23;;47264:51;;46853:21;46408:944;-1:-1:-1;;;46408:944:0:o;42765:226::-;42824:19;42846:10;:8;:10::i;:::-;42824:32;-1:-1:-1;42867:16:0;42886:25;:8;42824:32;42886:12;:25::i;:::-;42963:4;42947:22;;;;:7;:22;;;;;;42867:44;;-1:-1:-1;42947:36:0;;42867:44;42947:26;:36::i;:::-;42938:4;42922:22;;;;:7;:22;;;;;:61;-1:-1:-1;;;42765:226:0:o;42582:175::-;42674:7;;:24;;42686:11;42674;:24::i;:::-;42664:7;:34;42722:10;;:27;;42737:11;42722:14;:27::i;:::-;42709:10;:40;-1:-1:-1;;42582:175:0:o;43764:965::-;43857:16;;:::i;:::-;43886:29;43918:162;43934:7;43943:10;:25;;;43970:10;:27;;;43999:10;:28;;;44029:10;:27;;;44058:10;:21;;;47360:845;47526:19;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47526:19:0;47558:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47558:28:0;47617:32;47645:3;47617:23;:7;47629:10;47617:11;:23::i;:32::-;47597:17;;;:52;47682:34;47712:3;47682:25;:7;47694:12;47682:11;:25::i;:34::-;47660:19;;;:56;47750:35;47781:3;47750:26;:7;47762:13;47750:11;:26::i;:35::-;47727:20;;;:58;47818:34;47848:3;47818:25;:7;47830:12;47818:11;:25::i;:34::-;47796:19;;;:56;47879:28;47903:3;47879:19;:7;47891:6;47879:11;:19::i;:28::-;47863:13;;;:44;47980:19;;;;47957:17;;;;47945:55;;47980:19;47945:30;;:7;;:11;:30::i;:55::-;47918:82;;;48039:20;;;;;47918:8;;48011:48;;48039:20;;48011:48;:::i;:::-;;;-1:-1:-1;48098:19:0;;;;48070:47;;48098:8;;48070:47;;48098:19;;48070:47;:::i;:::-;;;-1:-1:-1;48156:13:0;;;;48128:41;;48156:8;;48128:41;;48156:13;;48128:41;:::i;:::-;;;-1:-1:-1;48188:8:0;47360:845;-1:-1:-1;;;;;;;47360:845:0:o;48213:768::-;48390:7;;;;48446:24;:7;48458:11;48446;:24::i;:::-;48428:42;-1:-1:-1;48481:16:0;48500:25;:8;48513:11;48500:12;:25::i;:::-;48481:44;-1:-1:-1;48536:18:0;48557:27;:10;48572:11;48557:14;:27::i;:::-;48536:48;-1:-1:-1;48595:19:0;48617:28;:11;48633;48617:15;:28::i;:::-;48595:50;-1:-1:-1;48656:18:0;48677:27;:10;48692:11;48677:14;:27::i;:::-;48656:48;-1:-1:-1;48715:12:0;48730:21;:4;48739:11;48730:8;:21::i;:::-;48715:36;-1:-1:-1;48762:23:0;48788:54;48830:11;48788:37;48814:10;48788:37;:7;48800:8;48788:11;:21::i;:54::-;48762:80;-1:-1:-1;48853:29:0;48872:10;48762:80;48853:29;:::i;:::-;;-1:-1:-1;48893:23:0;48912:4;48853:29;48893:23;:::i;:::-;48935:7;;-1:-1:-1;48893:23:0;;-1:-1:-1;48961:11:0;;-1:-1:-1;;;;;;48213:768:0;;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:2;;192:1;189;182:12;207:179;285:13;;338:22;327:34;;317:45;;307:2;;376:1;373;366:12;391:257;450:6;503:2;491:9;482:7;478:23;474:32;471:2;;;524:6;516;509:22;471:2;568:9;555:23;587:31;612:5;587:31;:::i;653:261::-;723:6;776:2;764:9;755:7;751:23;747:32;744:2;;;797:6;789;782:22;744:2;834:9;828:16;853:31;878:5;853:31;:::i;1189:398::-;1257:6;1265;1318:2;1306:9;1297:7;1293:23;1289:32;1286:2;;;1339:6;1331;1324:22;1286:2;1383:9;1370:23;1402:31;1427:5;1402:31;:::i;:::-;1452:5;-1:-1:-1;1509:2:1;1494:18;;1481:32;1522:33;1481:32;1522:33;:::i;:::-;1574:7;1564:17;;;1276:311;;;;;:::o;1592:466::-;1669:6;1677;1685;1738:2;1726:9;1717:7;1713:23;1709:32;1706:2;;;1759:6;1751;1744:22;1706:2;1803:9;1790:23;1822:31;1847:5;1822:31;:::i;:::-;1872:5;-1:-1:-1;1929:2:1;1914:18;;1901:32;1942:33;1901:32;1942:33;:::i;:::-;1696:362;;1994:7;;-1:-1:-1;;;2048:2:1;2033:18;;;;2020:32;;1696:362::o;2063:325::-;2131:6;2139;2192:2;2180:9;2171:7;2167:23;2163:32;2160:2;;;2213:6;2205;2198:22;2160:2;2257:9;2244:23;2276:31;2301:5;2276:31;:::i;:::-;2326:5;2378:2;2363:18;;;;2350:32;;-1:-1:-1;;;2150:238:1:o;2393:293::-;2449:6;2502:2;2490:9;2481:7;2477:23;2473:32;2470:2;;;2523:6;2515;2508:22;2470:2;2567:9;2554:23;2620:5;2613:13;2606:21;2599:5;2596:32;2586:2;;2647:6;2639;2632:22;2691:470;2778:6;2786;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:2;;;2868:6;2860;2853:22;2815:2;2896:40;2926:9;2896:40;:::i;:::-;2886:50;;2955:49;3000:2;2989:9;2985:18;2955:49;:::i;:::-;2945:59;;3047:2;3036:9;3032:18;3026:25;3091:10;3084:5;3080:22;3073:5;3070:33;3060:2;;3122:6;3114;3107:22;3060:2;3150:5;3140:15;;;2805:356;;;;;:::o;3166:190::-;3225:6;3278:2;3266:9;3257:7;3253:23;3249:32;3246:2;;;3299:6;3291;3284:22;3246:2;-1:-1:-1;3327:23:1;;3236:120;-1:-1:-1;3236:120:1:o;3361:194::-;3431:6;3484:2;3472:9;3463:7;3459:23;3455:32;3452:2;;;3505:6;3497;3490:22;3452:2;-1:-1:-1;3533:16:1;;3442:113;-1:-1:-1;3442:113:1:o;3560:258::-;3628:6;3636;3689:2;3677:9;3668:7;3664:23;3660:32;3657:2;;;3710:6;3702;3695:22;3657:2;-1:-1:-1;;3738:23:1;;;3808:2;3793:18;;;3780:32;;-1:-1:-1;3647:171:1:o;3823:326::-;3900:6;3908;3916;3969:2;3957:9;3948:7;3944:23;3940:32;3937:2;;;3990:6;3982;3975:22;3937:2;-1:-1:-1;;4018:23:1;;;4088:2;4073:18;;4060:32;;-1:-1:-1;4139:2:1;4124:18;;;4111:32;;3927:222;-1:-1:-1;3927:222:1:o;4154:316::-;4242:6;4250;4258;4311:2;4299:9;4290:7;4286:23;4282:32;4279:2;;;4332:6;4324;4317:22;4279:2;4366:9;4360:16;4350:26;;4416:2;4405:9;4401:18;4395:25;4385:35;;4460:2;4449:9;4445:18;4439:25;4429:35;;4269:201;;;;;:::o;4475:464::-;4570:6;4578;4586;4594;4602;4655:3;4643:9;4634:7;4630:23;4626:33;4623:2;;;4677:6;4669;4662:22;4623:2;-1:-1:-1;;4705:23:1;;;4775:2;4760:18;;4747:32;;-1:-1:-1;4826:2:1;4811:18;;4798:32;;4877:2;4862:18;;4849:32;;-1:-1:-1;4928:3:1;4913:19;4900:33;;-1:-1:-1;4613:326:1;-1:-1:-1;4613:326:1:o;4944:809::-;5084:6;5092;5100;5108;5116;5124;5132;5140;5148;5156;5209:3;5197:9;5188:7;5184:23;5180:33;5177:2;;;5231:6;5223;5216:22;5177:2;-1:-1:-1;;5259:23:1;;;5329:2;5314:18;;5301:32;;-1:-1:-1;5380:2:1;5365:18;;5352:32;;5431:2;5416:18;;5403:32;;-1:-1:-1;5482:3:1;5467:19;;5454:33;;-1:-1:-1;5534:3:1;5519:19;;5506:33;;-1:-1:-1;5586:3:1;5571:19;;5558:33;;-1:-1:-1;5638:3:1;5623:19;;5610:33;;-1:-1:-1;5690:3:1;5675:19;;5662:33;;-1:-1:-1;5742:3:1;5727:19;5714:33;;-1:-1:-1;5167:586:1;-1:-1:-1;5167:586:1:o;5758:483::-;5861:6;5869;5877;5885;5893;5946:3;5934:9;5925:7;5921:23;5917:33;5914:2;;;5968:6;5960;5953:22;5914:2;5996:39;6025:9;5996:39;:::i;:::-;5986:49;;6075:2;6064:9;6060:18;6054:25;6044:35;;6119:2;6108:9;6104:18;6098:25;6088:35;;6163:2;6152:9;6148:18;6142:25;6132:35;;6186:49;6230:3;6219:9;6215:19;6186:49;:::i;:::-;6176:59;;5904:337;;;;;;;;:::o;6246:293::-;6314:6;6367:2;6355:9;6346:7;6342:23;6338:32;6335:2;;;6388:6;6380;6373:22;6335:2;6425:9;6419:16;6475:4;6468:5;6464:16;6457:5;6454:27;6444:2;;6500:6;6492;6485:22;7556:603;7668:4;7697:2;7726;7715:9;7708:21;7758:6;7752:13;7801:6;7796:2;7785:9;7781:18;7774:34;7826:4;7839:140;7853:6;7850:1;7847:13;7839:140;;;7948:14;;;7944:23;;7938:30;7914:17;;;7933:2;7910:26;7903:66;7868:10;;7839:140;;;7997:6;7994:1;7991:13;7988:2;;;8067:4;8062:2;8053:6;8042:9;8038:22;8034:31;8027:45;7988:2;-1:-1:-1;8143:2:1;8122:15;-1:-1:-1;;8118:29:1;8103:45;;;;8150:2;8099:54;;7677:482;-1:-1:-1;;;7677:482:1:o;12265:469::-;12467:2;12449:21;;;12506:2;12486:18;;;12479:30;12545:34;12540:2;12525:18;;12518:62;12616:34;12611:2;12596:18;;12589:62;-1:-1:-1;;;12682:3:1;12667:19;;12660:32;12724:3;12709:19;;12439:295::o;13554:356::-;13756:2;13738:21;;;13775:18;;;13768:30;13834:34;13829:2;13814:18;;13807:62;13901:2;13886:18;;13728:182::o;15504:412::-;15706:2;15688:21;;;15745:2;15725:18;;;15718:30;15784:34;15779:2;15764:18;;15757:62;-1:-1:-1;;;15850:2:1;15835:18;;15828:46;15906:3;15891:19;;15678:238::o;19707:983::-;19969:4;20017:3;20006:9;20002:19;20048:6;20037:9;20030:25;20074:2;20112:6;20107:2;20096:9;20092:18;20085:34;20155:3;20150:2;20139:9;20135:18;20128:31;20179:6;20214;20208:13;20245:6;20237;20230:22;20283:3;20272:9;20268:19;20261:26;;20322:2;20314:6;20310:15;20296:29;;20343:4;20356:195;20370:6;20367:1;20364:13;20356:195;;;20435:13;;-1:-1:-1;;;;;20431:39:1;20419:52;;20526:15;;;;20491:12;;;;20467:1;20385:9;20356:195;;;-1:-1:-1;;;;;;;20607:32:1;;;;20602:2;20587:18;;20580:60;-1:-1:-1;;;20671:3:1;20656:19;20649:35;20568:3;19978:712;-1:-1:-1;;;19978:712:1:o;22557:128::-;22597:3;22628:1;22624:6;22621:1;22618:13;22615:2;;;22634:18;;:::i;:::-;-1:-1:-1;22670:9:1;;22605:80::o;22690:217::-;22730:1;22756;22746:2;;-1:-1:-1;;;22781:31:1;;22835:4;22832:1;22825:15;22863:4;22788:1;22853:15;22746:2;-1:-1:-1;22892:9:1;;22736:171::o;22912:422::-;23001:1;23044:5;23001:1;23058:270;23079:7;23069:8;23066:21;23058:270;;;23138:4;23134:1;23130:6;23126:17;23120:4;23117:27;23114:2;;;23147:18;;:::i;:::-;23197:7;23187:8;23183:22;23180:2;;;23217:16;;;;23180:2;23296:22;;;;23256:15;;;;23058:270;;;23062:3;22976:358;;;;;:::o;23339:131::-;23399:5;23428:36;23455:8;23449:4;23428:36;:::i;23475:140::-;23533:5;23562:47;23603:4;23593:8;23589:19;23583:4;23620:806;23669:5;23699:8;23689:2;;-1:-1:-1;23740:1:1;23754:5;;23689:2;23788:4;23778:2;;-1:-1:-1;23825:1:1;23839:5;;23778:2;23870:4;23888:1;23883:59;;;;23956:1;23951:130;;;;23863:218;;23883:59;23913:1;23904:10;;23927:5;;;23951:130;23988:3;23978:8;23975:17;23972:2;;;23995:18;;:::i;:::-;-1:-1:-1;;24051:1:1;24037:16;;24066:5;;23863:218;;24165:2;24155:8;24152:16;24146:3;24140:4;24137:13;24133:36;24127:2;24117:8;24114:16;24109:2;24103:4;24100:12;24096:35;24093:77;24090:2;;;-1:-1:-1;24202:19:1;;;24234:5;;24090:2;24281:34;24306:8;24300:4;24281:34;:::i;:::-;24351:6;24347:1;24343:6;24339:19;24330:7;24327:32;24324:2;;;24362:18;;:::i;:::-;24400:20;;23679:747;-1:-1:-1;;;23679:747:1:o;24431:168::-;24471:7;24537:1;24533;24529:6;24525:14;24522:1;24519:21;24514:1;24507:9;24500:17;24496:45;24493:2;;;24544:18;;:::i;:::-;-1:-1:-1;24584:9:1;;24483:116::o;24604:125::-;24644:4;24672:1;24669;24666:8;24663:2;;;24677:18;;:::i;:::-;-1:-1:-1;24714:9:1;;24653:76::o;24734:127::-;24795:10;24790:3;24786:20;24783:1;24776:31;24826:4;24823:1;24816:15;24850:4;24847:1;24840:15;24866:131;-1:-1:-1;;;;;24941:31:1;;24931:42;;24921:2;;24987:1;24984;24977:12

Swarm Source

ipfs://7ba6cfac08c6c8d36a00540745b696cfbfaca87fc4434190edfa51e12b0d6cb0
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.