DBGP plugin - release 0.7

2008-02-08
2012-11-14
  • Damjan Cvetko
    Damjan Cvetko
    2008-02-08

    Hi all.

    Latest release of the DBGP plugin fixes a few annoying bugs. It also adds an option to not brake at first line when debugging starts.

    Get it while it's hot! Please report any bugs here.

    Best regards,
    -Zobo

     
    • Sorry i can't use EasyPhp 2 beacause it includes php5 and my site provider doesn't support it from now...

      Sorry for disturbing you so long...

      By the way here is my complete phpinfo, but don't wast too many times on it you allready have spend to much

             

      PHP Logo
      PHP Version 4.3.10

      System     Windows NT JPSFIXE 5.1 build 2600
      Build Date     Dec 14 2004 17:46:48
      Server API     Apache
      Virtual Directory Support     enabled
      Configuration File (php.ini) Path     c:\jp\easyphp\apache\php.ini
      PHP API     20020918
      PHP Extension     20020429
      Zend Extension     20021010
      Debug Build     no
      Thread Safety     enabled
      Registered PHP Streams     php, http, ftp, compress.zlib

      Zend logo This program makes use of the Zend Scripting Language Engine:
      Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

      PHP Credits
      Configuration
      PHP Core
      Directive    Local Value    Master Value
      allow_call_time_pass_reference    Off    Off
      allow_url_fopen    On    On
      always_populate_raw_post_data    Off    Off
      arg_separator.input    &    &
      arg_separator.output    &    &
      asp_tags    Off    Off
      auto_append_file    no value    no value
      auto_prepend_file    no value    no value
      browscap    no value    no value
      default_charset    no value    no value
      default_mimetype    text/html    text/html
      define_syslog_variables    Off    Off
      disable_classes    no value    no value
      disable_functions    no value    no value
      display_errors    On    On
      display_startup_errors    Off    Off
      doc_root    no value    no value
      docref_ext    no value    no value
      docref_root    no value    no value
      enable_dl    On    On
      error_append_string    no value    no value
      error_log    no value    no value
      error_prepend_string    no value    no value
      error_reporting    2039    2039
      expose_php    On    On
      extension_dir    C:\JP\EasyPHP\\php\extensions\    C:\JP\EasyPHP\\php\extensions\ file_uploads    On    On
      gpc_order    GPC    GPC
      highlight.bg    #FFFFFF    #FFFFFF
      highlight.comment    #FF8000    #FF8000
      highlight.default    #0000BB    #0000BB
      highlight.html    #000000    #000000
      highlight.keyword    #007700    #007700
      highlight.string    #DD0000    #DD0000
      html_errors    On    On
      ignore_repeated_errors    Off    Off
      ignore_repeated_source    Off    Off
      ignore_user_abort    Off    Off
      implicit_flush    Off    Off
      include_path    .;C:\JP\EasyPHP\\php\pear\    .;C:\JP\EasyPHP\\php\pear\ log_errors    On    On
      log_errors_max_len    1024    1024
      magic_quotes_gpc    Off    Off
      magic_quotes_runtime    Off    Off
      magic_quotes_sybase    Off    Off
      max_execution_time    30    30
      max_input_time    60    60
      open_basedir    no value    no value
      output_buffering    0    0
      output_handler    no value    no value
      post_max_size    8M    8M
      precision    14    14
      register_argc_argv    Off    Off
      register_globals    Off    Off
      report_memleaks    On    On
      safe_mode    Off    Off
      safe_mode_exec_dir    no value    no value
      safe_mode_gid    Off    Off
      safe_mode_include_dir    no value    no value
      sendmail_from    xxxxxxx@yyyy.com    xxxxxxxx@yyyy.com
      sendmail_path    no value    no value
      serialize_precision    100    100
      short_open_tag    On    On
      SMTP    localhost    localhost
      smtp_port    25    25
      sql.safe_mode    Off    Off
      track_errors    Off    Off
      unserialize_callback_func    no value    no value
      upload_max_filesize    2M    2M
      upload_tmp_dir    C:\JP\EasyPHP\tmp\    C:\JP\EasyPHP\tmp\ user_dir    no value    no value
      variables_order    GPCS    GPCS
      xmlrpc_error_number    0    0
      xmlrpc_errors    Off    Off
      y2k_compliance    On    On

      apache
      Apache for Windows 95/NT

      Apache Version     Apache/1.3.33 (Win32) PHP/4.3.10
      Apache Release     10324100
      Apache API Version     19990320
      Hostname:Port     localhost:80
      Timeouts     Connection: 300 - Keep-Alive: 15

      Directive    Local Value    Master Value
      child_terminate    0    0
      engine    1    1
      last_modified    0    0
      xbithack    0    0

      Apache Environment
      Variable    Value
      COMSPEC     C:\WINDOWS\system32\cmd.exe
      DOCUMENT_ROOT     c:/jp/easyphp/www
      HTTP_ACCEPT     text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
      HTTP_ACCEPT_CHARSET     ISO-8859-1,utf-8;q=0.7,*;q=0.7
      HTTP_ACCEPT_ENCODING     gzip,deflate
      HTTP_ACCEPT_LANGUAGE     fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
      HTTP_CONNECTION     keep-alive
      HTTP_HOST     127.0.0.1
      HTTP_KEEP_ALIVE     300
      HTTP_REFERER     http://127.0.0.1/home/
      HTTP_USER_AGENT     Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
      PATH     C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\har\sys;c:\divalto\sys;c:\har\sys;c:\divalto\sys;;C:\PROGRA~1\FICHIE~1\MUVEET~1\030625;C:\PROGRA~1\FICHIE~1\MUVEET~1\030625;C:\JP\EasyPHP\Apache;C:\JP\EasyPHP\PHP
      REMOTE_ADDR     127.0.0.1
      REMOTE_PORT     1124
      SCRIPT_FILENAME     c:/jp/easyphp/home/phpinfo.php
      SERVER_ADDR     127.0.0.1
      SERVER_ADMIN     admin@localhost
      SERVER_NAME     127.0.0.1
      SERVER_PORT     80
      SERVER_SIGNATURE     <ADDRESS>Apache/1.3.33 Server at <A HREF="mailto:admin@localhost">127.0.0.1</A> Port 80</ADDRESS>
      SERVER_SOFTWARE     Apache/1.3.33 (Win32) PHP/4.3.10
      SystemRoot     C:\WINDOWS
      WINDIR     C:\WINDOWS
      GATEWAY_INTERFACE     CGI/1.1
      SERVER_PROTOCOL     HTTP/1.1
      REQUEST_METHOD     GET
      QUERY_STRING     no value
      REQUEST_URI     /home/phpinfo.php
      SCRIPT_NAME     /home/phpinfo.php

      HTTP Headers Information
      HTTP Request Headers
      HTTP Request     GET /home/phpinfo.php HTTP/1.1
      Accept     text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
      Accept-Charset     ISO-8859-1,utf-8;q=0.7,*;q=0.7
      Accept-Encoding     gzip,deflate
      Accept-Language     fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
      Connection     keep-alive
      Host     127.0.0.1
      Keep-Alive     300
      Referer     http://127.0.0.1/home/
      User-Agent     Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
      HTTP Response Headers
      X-Powered-By     PHP/4.3.10

      bcmath
      BCMath support     enabled

      calendar
      Calendar support     enabled

      com
      Directive    Local Value    Master Value
      com.allow_dcom    Off    Off
      com.autoregister_casesensitive    On    On
      com.autoregister_typelib    Off    Off
      com.autoregister_verbose    Off    Off
      com.typelib_file    no value    no value

      ctype
      ctype functions     enabled

      dbx
      dbx support     enabled
      dbx version     1.0.0
      supported databases     MySQL ODBC PostgreSQL Microsoft SQL Server FrontBase Oracle 8 (oci8) Sybase-CT

      Directive    Local Value    Master Value
      dbx.colnames_case    lowercase    lowercase

      ftp
      FTP support     enabled

      gd
      GD Support     enabled
      GD Version     bundled (2.0.28 compatible)
      FreeType Support     enabled
      FreeType Linkage     with freetype
      GIF Read Support     enabled
      GIF Create Support     enabled
      JPG Support     enabled
      PNG Support     enabled
      WBMP Support     enabled
      XBM Support     enabled

      mbstring
      Multibyte Support     enabled
      Japanese support     enabled
      Simplified chinese support     enabled
      Traditional chinese support     enabled
      Korean support     enabled
      Russian support     enabled
      Multibyte (japanese) regex support     enabled

      mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

      Directive    Local Value    Master Value
      mbstring.detect_order    no value    no value
      mbstring.encoding_translation    Off    Off
      mbstring.func_overload    0    0
      mbstring.http_input    pass    pass
      mbstring.http_output    pass    pass
      mbstring.internal_encoding    ISO-8859-1    no value
      mbstring.language    neutral    neutral
      mbstring.substitute_character    no value    no value

      mysql
      MySQL Support    enabled
      Active Persistent Links     0
      Active Links     0
      Client API version     3.23.49

      Directive    Local Value    Master Value
      mysql.allow_persistent    On    On
      mysql.connect_timeout    60    60
      mysql.default_host    no value    no value
      mysql.default_password    no value    no value
      mysql.default_port    no value    no value
      mysql.default_socket    no value    no value
      mysql.default_user    no value    no value
      mysql.max_links    Unlimited    Unlimited
      mysql.max_persistent    Unlimited    Unlimited
      mysql.trace_mode    Off    Off

      odbc
      ODBC Support    enabled
      Active Persistent Links     0
      Active Links     0
      ODBC library     Win32

      Directive    Local Value    Master Value
      odbc.allow_persistent    On    On
      odbc.check_persistent    On    On
      odbc.default_db    no value    no value
      odbc.default_pw    no value    no value
      odbc.default_user    no value    no value
      odbc.defaultbinmode    return as is    return as is
      odbc.defaultlrl    return up to 4096 bytes    return up to 4096 bytes
      odbc.max_links    Unlimited    Unlimited
      odbc.max_persistent    Unlimited    Unlimited

      overload
      User-Space Object Overloading Support     enabled

      pcre
      PCRE (Perl Compatible Regular Expressions) Support     enabled
      PCRE Library Version     4.5 01-December-2003

      session
      Session Support     enabled
      Registered save handlers     files user

      Directive    Local Value    Master Value
      session.auto_start    Off    Off
      session.bug_compat_42    Off    Off
      session.bug_compat_warn    On    On
      session.cache_expire    180    180
      session.cache_limiter    nocache    nocache
      session.cookie_domain    no value    no value
      session.cookie_lifetime    0    0
      session.cookie_path    /    /
      session.cookie_secure    Off    Off
      session.entropy_file    no value    no value
      session.entropy_length    0    0
      session.gc_divisor    1000    1000
      session.gc_maxlifetime    1440    1440
      session.gc_probability    1    1
      session.name    PHPSESSID    PHPSESSID
      session.referer_check    no value    no value
      session.save_handler    files    files
      session.save_path    C:\JP\EasyPHP\\tmp\&nbsp;   C:\JP\EasyPHP\\tmp\ session.serialize_handler    php    php
      session.use_cookies    On    On
      session.use_only_cookies    Off    Off
      session.use_trans_sid    Off    Off

      standard
      Regex Library     Bundled library enabled
      Dynamic Library Support     enabled
      Internal Sendmail Support for Windows     enabled

      Directive    Local Value    Master Value
      assert.active    1    1
      assert.bail    0    0
      assert.callback    no value    no value
      assert.quiet_eval    0    0
      assert.warning    1    1
      auto_detect_line_endings    0    0
      default_socket_timeout    60    60
      safe_mode_allowed_env_vars    PHP_    PHP_
      safe_mode_protected_env_vars    LD_LIBRARY_PATH    LD_LIBRARY_PATH
      url_rewriter.tags    a=href,area=href,frame=src,input=src,form=fakeentry    a=href,area=href,frame=src,input=src,form=fakeentry
      user_agent    no value    no value

      tokenizer
      Tokenizer Support     enabled

      wddx
      WDDX Support    enabled
      WDDX Session Serializer     enabled

      xdebug
      xdebug support    enabled
      Version     2.0.2

      XDEBUG NOT LOADED AS ZEND EXTENSION

      Supported protocols    Revision
      DBGp - Common DeBuGger Protocol     $Revision: 1.125.2.2 $
      GDB - GNU Debugger protocol     $Revision: 1.87 $
      PHP3 - PHP 3 Debugger protocol     $Revision: 1.22 $

      Directive    Local Value    Master Value
      xdebug.auto_trace    Off    Off
      xdebug.collect_includes    On    On
      xdebug.collect_params    0    0
      xdebug.collect_return    Off    Off
      xdebug.collect_vars    Off    Off
      xdebug.default_enable    On    On
      xdebug.dump.COOKIE    no value    no value
      xdebug.dump.ENV    no value    no value
      xdebug.dump.FILES    no value    no value
      xdebug.dump.GET    no value    no value
      xdebug.dump.POST    no value    no value
      xdebug.dump.REQUEST    no value    no value
      xdebug.dump.SERVER    no value    no value
      xdebug.dump.SESSION    no value    no value
      xdebug.dump_globals    On    On
      xdebug.dump_once    On    On
      xdebug.dump_undefined    Off    Off
      xdebug.extended_info    On    On
      xdebug.idekey    jpsiffert    default
      xdebug.manual_url    http://www.php.net    http://www.php.net
      xdebug.max_nesting_level    100    100
      xdebug.profiler_aggregate    Off    Off
      xdebug.profiler_append    Off    Off
      xdebug.profiler_enable    Off    Off
      xdebug.profiler_enable_trigger    Off    Off
      xdebug.profiler_output_dir    /tmp    /tmp
      xdebug.profiler_output_name    cachegrind.out.%p    cachegrind.out.%p
      xdebug.remote_autostart    Off    Off
      xdebug.remote_enable    On    On
      xdebug.remote_handler    dbgp    dbgp
      xdebug.remote_host    127.0.0.1    127.0.0.1
      xdebug.remote_log    C:\Jp\easyPhp\www\xdebug.log    C:\Jp\easyPhp\www\xdebug.log
      xdebug.remote_mode    req    req
      xdebug.remote_port    9000    9000
      xdebug.show_exception_trace    Off    Off
      xdebug.show_local_vars    On    On
      xdebug.show_mem_delta    Off    Off
      xdebug.trace_format    0    0
      xdebug.trace_options    0    0
      xdebug.trace_output_dir    /tmp    /tmp
      xdebug.trace_output_name    trace.%c    trace.%c
      xdebug.var_display_max_children    128    128
      xdebug.var_display_max_data    512    512
      xdebug.var_display_max_depth    3    3

      xml
      XML Support     active
      XML Namespace Support     active
      EXPAT Version     1.95.6

      zlib
      ZLib Support     enabled
      Compiled Version     1.1.4
      Linked Version     1.1.4

      Directive    Local Value    Master Value
      zlib.output_compression    Off    Off
      zlib.output_compression_level    -1    -1
      zlib.output_handler    no value    no value

      Additional Modules
      Module Name

      Environment
      Variable    Value
      ALLUSERSPROFILE     C:\Documents and Settings\All Users
      APPDATA     C:\Documents and Settings\jpsiffert\Application Data
      CLIENTNAME     Console
      CommonProgramFiles     C:\Program Files\Fichiers communs
      COMPUTERNAME     JPSFIXE
      ComSpec     C:\WINDOWS\system32\cmd.exe
      FP_NO_HOST_CHECK     NO
      HOMEDRIVE     C:
      HOMEPATH     \Documents and Settings\jpsiffert
      LOGONSERVER     \\SERVEURAD
      NUMBER_OF_PROCESSORS     1
      OS     Windows_NT
      Path     C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\har\sys;c:\divalto\sys;c:\har\sys;c:\divalto\sys;;C:\PROGRA~1\FICHIE~1\MUVEET~1\030625;C:\PROGRA~1\FICHIE~1\MUVEET~1\030625;C:\JP\EasyPHP\Apache;C:\JP\EasyPHP\PHP
      PATHEXT     .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
      PROCESSOR_ARCHITECTURE     x86
      PROCESSOR_IDENTIFIER     x86 Family 15 Model 95 Stepping 2, AuthenticAMD
      PROCESSOR_LEVEL     15
      PROCESSOR_REVISION     5f02
      ProgramFiles     C:\Program Files
      SESSIONNAME     Console
      SystemDrive     C:
      SystemRoot     C:\WINDOWS
      TEMP     C:\DOCUME~1\JPSIFF~1\LOCALS~1\Temp
      TMP     C:\DOCUME~1\JPSIFF~1\LOCALS~1\Temp
      USERDNSDOMAIN     DIVALTO.LOCAL
      USERDOMAIN     DIVALTO
      USERNAME     jpsiffert
      USERPROFILE     C:\Documents and Settings\jpsiffert
      windir     C:\WINDOWS
      X_USER     ROOT

      PHP Variables
      Variable    Value
      _SERVER["COMSPEC"]    C:\WINDOWS\system32\cmd.exe
      _SERVER["DOCUMENT_ROOT"]    c:/jp/easyphp/www
      _SERVER["HTTP_ACCEPT"]    text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
      _SERVER["HTTP_ACCEPT_CHARSET"]    ISO-8859-1,utf-8;q=0.7,*;q=0.7
      _SERVER["HTTP_ACCEPT_ENCODING"]    gzip,deflate
      _SERVER["HTTP_ACCEPT_LANGUAGE"]    fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
      _SERVER["HTTP_CONNECTION"]    keep-alive
      _SERVER["HTTP_HOST"]    127.0.0.1
      _SERVER["HTTP_KEEP_ALIVE"]    300
      _SERVER["HTTP_REFERER"]    http://127.0.0.1/home/
      _SERVER["HTTP_USER_AGENT"]    Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
      _SERVER["PATH"]    C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\har\sys;c:\divalto\sys;c:\har\sys;c:\divalto\sys;;C:\PROGRA~1\FICHIE~1\MUVEET~1\030625;C:\PROGRA~1\FICHIE~1\MUVEET~1\030625;C:\JP\EasyPHP\Apache;C:\JP\EasyPHP\PHP
      _SERVER["REMOTE_ADDR"]    127.0.0.1
      _SERVER["REMOTE_PORT"]    1124
      _SERVER["SCRIPT_FILENAME"]    c:/jp/easyphp/home/phpinfo.php
      _SERVER["SERVER_ADDR"]    127.0.0.1
      _SERVER["SERVER_ADMIN"]    admin@localhost
      _SERVER["SERVER_NAME"]    127.0.0.1
      _SERVER["SERVER_PORT"]    80
      _SERVER["SERVER_SIGNATURE"]    <ADDRESS>Apache/1.3.33 Server at <A HREF="mailto:admin@localhost">127.0.0.1</A> Port 80</ADDRESS>
      _SERVER["SERVER_SOFTWARE"]    Apache/1.3.33 (Win32) PHP/4.3.10
      _SERVER["SystemRoot"]    C:\WINDOWS
      _SERVER["WINDIR"]    C:\WINDOWS
      _SERVER["GATEWAY_INTERFACE"]    CGI/1.1
      _SERVER["SERVER_PROTOCOL"]    HTTP/1.1
      _SERVER["REQUEST_METHOD"]    GET
      _SERVER["QUERY_STRING"]    no value
      _SERVER["REQUEST_URI"]    /home/phpinfo.php
      _SERVER["SCRIPT_NAME"]    /home/phpinfo.php
      _SERVER["PATH_TRANSLATED"]    c:/jp/easyphp/home/phpinfo.php
      _SERVER["PHP_SELF"]    /home/phpinfo.php

      PHP License

      This program is free software; you can redistribute it and/or modify it under the terms of the PHP License as published by the PHP Group and included in the distribution in the file: LICENSE

      This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

      If you did not receive a copy of the PHP license, or have any questions about PHP licensing, please contact license@php.net.

       
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-13

        Without looking at it too much this seems to be the obvious problem:
        PHP Version 4.3.10

        There were quite a few changes in the PHP core from 4.3 to 4.4, if I remember correctly they ported some of the internals from PHP 5 back to 4.4. I think that Xdebug doesn't work with PHP versions prior 4.4.1. I suggest you look at what version your provider is using and upgrade your local PHP. I bet it's at least 4.4.something. If not, thats probably a security risk, unless they are running some wild patched up version.

        But then again the syntax of the language has not changed between 4.3 and 4.4 so you could develop at home on 4.4 and have the advantage of debugging, then run the code on whatever version your provider has.

        Best regards.
        -Zobo

         
    • Can't wait to test it!!

      I'm on the way!!

      Jp

       
    • Well zobo, how to tell that... I still have the bug from the preceding post.
      I set a breakpoint and when i run the page it doesn't break into the code, Npp does blink but nothing more...

      If i switch on the break on first line checkbox, i get an access violation à adress XXXXXX error messagebox....

       
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-08

        Humm..

        Again the raw log as before please. I see if at least the messages are correct.
        I did test it with windows tho.. No problems.

        -Zobo

         
        • Damjan Cvetko
          Damjan Cvetko
          2008-02-08

          Yay. I just found another bug and some other windows path problems. But they should not be the same as you are having.

           
    • Here you are (can you also enable ctrl+A (select all) to work in raw window this could be easier)

      Accept: 127.0.0.1
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///c:/jp/easyphp/www/lolita/index.php" language="PHP" protocol_version="1.0" appid="2480" idekey="default"><engine version="2.0.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright></init>
      Send: feature_set -i 1 -n max_depth -v 3
      Send: feature_set -i 2 -n max_children -v 15
      Send: breakpoint_set -i 3 -t line -f file:///C:/JP/EasyPHP/www/lolita/index.php -n 20 -s enabled -h 0 -o >=
      Send: breakpoint_list -i 4
      Send: run -i 5
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="max_depth" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_children" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" state="enabled" id="24800001"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="4"><breakpoint type="line" filename="file:///C:/JP/EasyPHP/www/lolita/index.php" lineno="20" state="enabled" hit_count="0" hit_condition="&gt;=" hit_value="0" id="24800001"></breakpoint></response>
      ----
      Accept: 127.0.0.1
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="5" status="stopped" reason="ok"></response>
      Send: run -i 6
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///c:/jp/easyphp/www/lolita/css/dyncss.php" language="PHP" protocol_version="1.0" appid="2480" idekey="default"><engine version="2.0.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright></init>
      Send: source -i 1 -f file:///c:/jp/easyphp/www/lolita/css/dyncss.php
      Send: feature_set -i 2 -n max_depth -v 3
      Send: feature_set -i 3 -n max_children -v 15
      Send: breakpoint_set -i 4 -t line -f file:///C:/JP/EasyPHP/www/lolita/index.php -n 20 -s enabled -h 0 -o >=
      Send: breakpoint_list -i 5
      Send: run -i 6
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="source" transaction_id="1" encoding="base64"><![CDATA[PD8NCiAgCWhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2NzczsgY2hhcnNldD11dGYtOCcpOw0KDQovKg0KIAlyZXF1aXJlKCcuL2xpYi9iYXNlLmluYycpOw0KDQoJJHNtYXJ0eS0+dGVtcGxhdGVfZGlyPScuL2Nzcy8nOw0KDQoJaWYoaXNzZXQoJF9HRVRbJ3BhZ2VHJ10pKQ0KCQkkc21hcnR5LT5kaXNwbGF5KCdzaXRlXycuJF9HRVRbJ3BhZ2VHJ10uJy5jc3MnKTsNCgllbHNlaWYoaXNzZXQoJF9HRVRbJ3BhZ2UnXSkpDQoJCSRzbWFydHktPmRpc3BsYXkoJF9HRVRbJ3BhZ2UnXS4nL3NpdGVfJy4kX0dFVFsncGFnZSddLicuY3NzJyk7DQoJCQ0KKi8NCg0KCWlmKGlzc2V0KCRfR0VUWydwYWdlRyddKSkNCgkJaW5jbHVkZSgnLi9zaXRlXycuJF9HRVRbJ3BhZ2VHJ10uJy5jc3MnKTsNCgllbHNlaWYoaXNzZXQoJF9HRVRbJ3BhZ2UnXSkpDQoJCWluY2x1ZGUoJy4vJy4kX0dFVFsncGFnZSddLicvc2l0ZV8nLiRfR0VUWydwYWdlJ10uJy5jc3MnKTsNCg0KPz4NCg==]]></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" state="enabled" id="24800001"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="5"><breakpoint type="line" filename="file:///C:/JP/EasyPHP/www/lolita/index.php" lineno="20" state="enabled" hit_count="0" hit_condition="&gt;=" hit_value="0" id="24800001"></breakpoint></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="6" status="stopped" reason="ok"></response>
      Send: run -i 7
      ----
      Disconnect: 127.0.0.1
      Disconnect: 127.0.0.1
      Accept: 127.0.0.1
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///c:/jp/easyphp/www/lolita/css/dyncss.php" language="PHP" protocol_version="1.0" appid="2480" idekey="default"><engine version="2.0.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright></init>
      Send: source -i 1 -f file:///c:/jp/easyphp/www/lolita/css/dyncss.php
      Send: feature_set -i 2 -n max_depth -v 3
      Send: feature_set -i 3 -n max_children -v 15
      Send: breakpoint_set -i 4 -t line -f file:///C:/JP/EasyPHP/www/lolita/index.php -n 20 -s enabled -h 0 -o >=
      Send: breakpoint_list -i 5
      Send: run -i 6
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="source" transaction_id="1" encoding="base64"><![CDATA[PD8NCiAgCWhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2NzczsgY2hhcnNldD11dGYtOCcpOw0KDQovKg0KIAlyZXF1aXJlKCcuL2xpYi9iYXNlLmluYycpOw0KDQoJJHNtYXJ0eS0+dGVtcGxhdGVfZGlyPScuL2Nzcy8nOw0KDQoJaWYoaXNzZXQoJF9HRVRbJ3BhZ2VHJ10pKQ0KCQkkc21hcnR5LT5kaXNwbGF5KCdzaXRlXycuJF9HRVRbJ3BhZ2VHJ10uJy5jc3MnKTsNCgllbHNlaWYoaXNzZXQoJF9HRVRbJ3BhZ2UnXSkpDQoJCSRzbWFydHktPmRpc3BsYXkoJF9HRVRbJ3BhZ2UnXS4nL3NpdGVfJy4kX0dFVFsncGFnZSddLicuY3NzJyk7DQoJCQ0KKi8NCg0KCWlmKGlzc2V0KCRfR0VUWydwYWdlRyddKSkNCgkJaW5jbHVkZSgnLi9zaXRlXycuJF9HRVRbJ3BhZ2VHJ10uJy5jc3MnKTsNCgllbHNlaWYoaXNzZXQoJF9HRVRbJ3BhZ2UnXSkpDQoJCWluY2x1ZGUoJy4vJy4kX0dFVFsncGFnZSddLicvc2l0ZV8nLiRfR0VUWydwYWdlJ10uJy5jc3MnKTsNCg0KPz4NCg==]]></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" state="enabled" id="24800002"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="5"><breakpoint type="line" filename="file:///C:/JP/EasyPHP/www/lolita/index.php" lineno="20" state="enabled" hit_count="0" hit_condition="&gt;=" hit_value="0" id="24800002"></breakpoint></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="6" status="stopped" reason="ok"></response>
      Send: run -i 7
      ----
      ----
      Disconnect: 127.0.0.1
      Accept: 127.0.0.1
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///c:/jp/easyphp/www/lolita/ajax.php" language="PHP" protocol_version="1.0" appid="2480" idekey="default"><engine version="2.0.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright></init>
      Send: source -i 1 -f file:///c:/jp/easyphp/www/lolita/ajax.php
      Send: feature_set -i 2 -n max_depth -v 3
      Send: feature_set -i 3 -n max_children -v 15
      Send: breakpoint_set -i 4 -t line -f file:///C:/JP/EasyPHP/www/lolita/index.php -n 20 -s enabled -h 0 -o >=
      Send: breakpoint_list -i 5
      Send: run -i 6
      ----
      Accept: 127.0.0.1
      ----
      ----
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="source" transaction_id="1" encoding="base64"><![CDATA[PD9waHANCgkvLyBQb3VyIGZvcmNlciBsYSBib25uZSBpbnRlcnByZXRhdGlvbiBkZXMgY2FyYWN0w6hyZXMNCgloZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iik7DQoNCglyZXF1aXJlX29uY2UoJy4vbGliL2Jhc2UuaW5jJyk7DQoNCi8vCSRzbWFydHktPnRlbXBsYXRlX2Rpcj0kbW90Wyd0cGxfcGF0aCddLidfX2FkbWluX18vJzsNCg0KCWZ1bmN0aW9uIGFsZXJ0QWpheCgkdHh0LCRpPTEpew0KCQlpZigkaT09MSkNCgkJCWVjaG8gImFsZXJ0KCciLmFkZHNsYXNoZXMoJHR4dCkuIicpOyI7DQoJCWVsc2UNCgkJCWVjaG8gIm5ldyBJbnNlcnRpb24uQm90dG9tKCdpYycsJyIuYWRkc2xhc2hlcygkdHh0KS4iJyk7IjsNCgl9DQoNCg0KCWZ1bmN0aW9uIGVudm95ZXJNYWlsKCRtYWlsLCRtZW1icmUpew0KCSAgICBnbG9iYWwgJHNtYXJ0eTsNCgkJJHNtYXJ0eS0+YXNzaWduKCdtZW1icmUnLCRtZW1icmUpOw0KCQkkc21hcnR5LT5hc3NpZ24oJ3Byb2ZpbF9tb2RpZmljYXRpb25fbWFpbCcsdHJ1ZSk7DQoJCSRtZXNzYWdlPSRzbWFydHktPmZldGNoKCcuL19fYWRtaW5fXy9zaXRlX19fYWRtaW5fX3ByZXNlbnRhdGlvbnMuJy5UUExfRVhUKTsNCgkJJGhlYWRlcnM9IiI7DQoJCSRoZWFkZXJzLj0iRk9STTogd2VibWFzdGVyQGFzc29jaWF0aW9uLWxvbGl0YS5jb21cbiI7DQoJCSRoZWFkZXJzLj0iQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI7DQoNCgkJbWFpbCgkbWFpbCwnVG9uIHByb2ZpbCBlbiBsaWduZSDDoCBsYSBMT0xJVEEnLCRtZXNzYWdlLCRoZWFkZXJzKTsNCgl9DQoNCglpZighaXNzZXQoJF9SRVFVRVNUWydhY3Rpb24nXSkpDQoJCWJvdWdlX2RlX2xhKCcuLycpOwkJDQoJJHNhaXNvbl9jb3VyYW50ZT0kZGItPlNlbGVjdEZpcnN0KCdzZWxlY3QgKiBmcm9tIHRfc2Fpc29ucyB3aGVyZSBzYWlzb25fY291cmFudGU9MScpOw0KCSRzbWFydHktPmFzc2lnbignc2Fpc29uX2NvdXJhbnRlJywkc2Fpc29uX2NvdXJhbnRlKTsNCg0KCXN3aXRjaCgkX1JFUVVFU1RbJ2FjdGlvbiddKXsNCgkgICAgY2FzZSAnZHluJzoNCgkgICAgCXN3aXRjaCgkX1JFUVVFU1RbJ3doYXQnXSl7DQoJICAgIAkgICAgY2FzZSAncGljJzoNCgkgICAgCSAgICANCgkgICAgCSAgICAgICAgJHR5cGU9JF9HRVRbJ2ltYWdlX3R5cGUnXTsNCgkJCQkJDQoJCQkJCWlmICgkdHlwZT09MCkgJHR5cGU9MTsNCgkgICAgCSAgICAgICAgDQoJICAgIAkgICAgICAgICRzcWw9J3NlbGVjdCBpbWFnZV9pZCxpbWFnZV9leHQgZnJvbSB0X2R5bl9pbWFnZXMgd2hlcmUgaW1hZ2VfdHlwZT0nLiR0eXBlLicgb3JkZXIgYnkgcmFuZCgpIExJTUlUIDEnOw0KDQoJICAgIAkgICAgICAgICRmaXJzdD0kZGItPlNlbGVjdEZpcnN0KCRzcWwpOw0KCSAgICAJICAgICAgICANCgkgICAgCSAgICAgICAgJHBhdGggPSAkcGFyYW1bJ3JlcF9keW4nXS4nL2ltYWdlJy4kZmlyc3RbJ2ltYWdlX2lkJ10uJy4nLiRmaXJzdFsnaW1hZ2VfZXh0J107DQoJICAgIAkgICAgICAgIA0KCQkJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogaW1hZ2UvIi4kZmlyc3RbJ2ltYWdlX2V4dCddKTsNCgkJCQkJDQoJCQkJCSRmZCA9IGZvcGVuKCRwYXRoLCdyJyk7DQoJCQkJCQl3aGlsZSAoIWZlb2YoJGZkKSkgew0KCQkJCQkJJGJ1ZmZlciA9IGZnZXRzKCRmZCwgNDA5Nik7DQoJCQkJCQllY2hvICRidWZmZXI7DQoJCQkJCX0NCgkJCQkJZmNsb3NlICgkZmQpOw0KCQkJCQkNCgkgICAgCSAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgY2FzZSAnY2FwdHVyZSc6DQoJCQkJCSRzbWFydHktPmFzc2lnbigncHJlc2VudGF0aW9uRHluYW1pcXVlJywkX1BPU1RbJ2NhcHR1cmUnXSk7DQoJCQkJCSRzbWFydHktPmRpc3BsYXkoJy4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fcHJlc2VudGF0aW9uLicuVFBMX0VYVCk7DQoJICAgICAgICAgICAgICAgIGJyZWFrOw0KCSAgICAgICAgICAgIGNhc2UgJ2NvbWJvLXRlYW0tbGlzdCc6DQoJICAgICAgICAgICAgDQoJICAgICAgICAgICAgaWYoJF9QT1NUWydzYWlzb25faWQnXSE9Jycpew0KCQkgICAgICAgICAgICAkc3FsPScNCgkJCQkJCXNlbGVjdCAqIGZyb20gdF9lcXVpcGVzIGFzIHRfZQ0KCQkJCQkJaW5uZXIgam9pbiB0X2xpZW5zX2VzDQoJCQkJCQlVU0lORyhlcXVpcGVfaWQpDQoJCQkJCQlXSEVSRSBzYWlzb25faWQ9Jy4kX1BPU1RbJ3NhaXNvbl9pZCddOw0KDQoJCSAgICAgICAgICAgICR0ZWFtcz0kZGItPlNlbGVjdEFsbEJ5KCRzcWwsJ2VxdWlwZV9pZCcpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJICAgICR0ZWFtcz1hcnJheSgpOw0KCQkJCSAgICANCgkJCQllY2hvICINCgkJCQkgICAgdmFyIGNvbWJvID0gJCgnJF9QT1NUW3RhcmdldF0nKTsNCgkJCQkgICAgY29tYm8ub3B0aW9ucy5sZW5ndGg9MDsNCgkJCQkgICAgdmFyIGRlZj0wOw0KCQkJCSAgICB2YXIgdmFsZXVyPTA7DQoJCQkJCSI7DQoJCQkJJG9wdGlvbnM9Jyc7DQoJCQ0KCQkJCWlmKCRfUE9TVFsndmFsTnVsbCddPT10cnVlKQ0KCQkJCQkkb3B0aW9ucy49J2NvbWJvLm9wdGlvbnNbY29tYm8ub3B0aW9ucy5sZW5ndGhdPW5ldyBPcHRpb24oIi0iLCIwIix0cnVlLHRydWUpOyc7DQoJCQkJDQoJCQkJZm9yZWFjaCgkdGVhbXMgYXMgJGlkPT4kdGVhbSl7DQoJCQkJICAgICRvcHRpb25zLj0nY29tYm8ub3B0aW9uc1tjb21iby5vcHRpb25zLmxlbmd0aF09bmV3IE9wdGlvbigiJy4kdGVhbVtlcXVpcGVfbm9tXS4nIiwiJy4kaWQuJyIsJy4oJGlkPT0kX1BPU1RbJ2RlZlZhbHVlJ10/ICd0cnVlLHRydWUnIDonZmFsc2UsZmFsc2UnKS4nKTsnOw0KCQkJCSAgICBpZigkaWQ9PSRfUE9TVFsnZGVmVmFsdWUnXSkNCgkJCQkgICAgCSRvcHRpb25zLj0nDQoJCQkJCQkJZGVmPWNvbWJvLm9wdGlvbnMubGVuZ3RoLTE7DQoJCQkJCQkJdmFsZXVyPScuJGlkLic7DQoJCQkJCQknOw0KCQkJCQkvLyRvcHRpb25zLj0oJGlkPT0kX1BPU1RbJ2RlZlZhbHVlJ10gPyAnY29tYm8ub3B0aW9ucy5zZWxlY3RlZEluZGV4PWNvbWJvLm9wdGlvbnMubGVuZ3RoOyc6JycpOw0KCQkJCSAgICB9DQoNCgkJCQlpZigkb3B0aW9ucz09JycpDQoJCQkJICAgICRvcHRpb25zPSdjb21iby5vcHRpb25zW2NvbWJvLm9wdGlvbnMubGVuZ3RoXT1uZXcgT3B0aW9uKCJBdWN1bmUiLCIiLHRydWUsdHJ1ZSk7JzsNCgkJCQllbHNlDQoJCQkJCSRvcHRpb25zLj0nDQoJCQkJCQljb21iby5zZWxlY3RlZEluZGV4PWRlZjsNCgkJCQkJCWNvbWJvLnZhbHVlPXZhbGV1cjsnOw0KCQkJCQkNCgkJCQllY2hvICRvcHRpb25zOw0KDQoJICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICB9DQoJICAgICAgICANCgkgICAgICAgIGJyZWFrOw0KCQljYXNlICd0ZXN0JzoNCgkJCQ0KCQkJYnJlYWs7DQoJCWNhc2UgJ2dyb3VwQWRkJzoNCgkJCSR2YWwJPSRfUE9TVFsndmFsJ107DQoJCQkkb2JqSWQJPSRfUE9TVFsnb2JqSWQnXTsNCgkJCQ0KCQkJZWNobyAiDQoJCQkJaWYob2JqPWdldE9iaignIi4kb2JqSWQuIicpKXsNCgkJCQkJcmVzZXRGaWVsZFByZXNlbnRhdGlvbihvYmopOw0KCQkJCSI7DQoJCQkNCgkJCWlmKCR2YWw9PScnKXsNCgkJCQ0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfUkVRVUlSRUQnXS4iJyk7DQoJCQkJCXNldENsYXNzTmFtZShvYmosJ2ZpZWxkX3JlcXVpcmVkJyk7DQoJCQkJCW9iai5mb2N1cygpOw0KCQkJCQkiOw0KCQkJfQ0KCQkJZWxzZXsNCgkJCQkkc3FsPSdzZWxlY3QgY291bnQoKikgZnJvbSB0X2dyb3VwcyB3aGVyZSBncm91cF9uYW1lPSInLiR2YWwuJyInOw0KCQkJCWlmKCRkYi0+Q291bnQoJHNxbCk+MCkNCgkJCQkJZWNobyAiDQoJCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCd0aXRsZScsJyIuJG1vdFsnRVJSX0dST1VQX0VYSVNUUyddLiInKTsNCgkJCQkJCWFkZENsYXNzTmFtZShvYmosJ2ZpZWxkX2luX2Vycm9yJyk7DQoJCQkJCQlvYmouZm9jdXMoKTsNCgkJCQkJIjsNCgkJCQllbHNlew0KCQkJCQllY2hvICINCgkJCQkJCWJsaW5rU3R5bGUob2JqLCdmaWVsZF9vaycpOw0KCQkJCQkiOw0KCQkJCX0NCgkJCX0NCgkJCWVjaG8gIg0KCQkJfSAvLyBmaW4gaWYoaXNPYmoob2JqKSkNCgkJCWVsc2UNCgkJCQlhbGVydCgncGFzIHVuIG9iaicrIi4kb2JqSWQuIik7DQoJCQkiOw0KCQkNCgkJY2FzZSAnY2hlY2tGaWVsZCc6DQoJCQkkdmFsCT0kX1BPU1RbJ3ZhbCddOw0KCQkJJG9iaklkCT0kX1BPU1RbJ29iaklkJ107DQoJCQkkb2JsaWcJPSRfUkVRVUVTVFsnb2JsaWcnXTsNCgkJCSRtYXgJPSRfUkVRVUVTVFsnbWF4J107DQoJCQkkbWluCT0kX1JFUVVFU1RbJ21pbiddOw0KDQoJCQllY2hvICINCgkJCQlpZihvYmo9Z2V0T2JqKCciLiRvYmpJZC4iJykpew0KCQkJCQlyZXNldEZpZWxkUHJlc2VudGF0aW9uKG9iaik7DQoJCQkJIjsNCgkJCQ0KCQkJaWYoaXNzZXQoJG9ibGlnKSAmJiBzdHJfcmVwbGFjZSgnICcsJycsJHZhbCk9PScnKXsNCgkJCQllY2hvICINCgkJCQkJc2V0QXR0cmlidXRlKG9iaiwnb3RpdGxlJyxvYmoudGl0bGUpOw0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCd0aXRsZScsJyIuJG1vdFsnRVJSX0ZJRUxEX1JFUVVJUkVEJ10uIicpOw0KCQkJCQlzZXRDbGFzc05hbWUob2JqLCdmaWVsZF9yZXF1aXJlZCcpOw0KCQkJCQlvYmouZm9jdXMoKTsNCgkJCQkJIjsNCgkJCX0NCgkJCWVsc2UgaWYoaXNzZXQoJG1pbikgJiYgc3RybGVuKCR2YWwpPCRtaW4pew0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfVE9PX1NIT1JUJ10uIicpOw0KCQkJCQlzZXRDbGFzc05hbWUob2JqLCdmaWVsZF9yZXF1aXJlZCcpOw0KCQkJCQlvYmouZm9jdXMoKTsNCgkJCQkJIjsNCgkJCX0NCgkJCWVsc2UgaWYoaXNzZXQoJG1heCkgJiYgc3RybGVuKCR2YWwpPiRtYXgpew0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfVE9PX0xPTkcnXS4iJyk7DQoJCQkJCXNldENsYXNzTmFtZShvYmosJ2ZpZWxkX3JlcXVpcmVkJyk7DQoJCQkJCW9iai5mb2N1cygpOw0KCQkJCQkiOw0KCQkJfQ0KCQkJCQkJCQ0KCQkJZWNobyAifTsiOw0KCQkJCQkNCgkJCWJyZWFrOwkNCgkJDQoJCWNhc2UgJ3VzZXInOg0KCQkJDQoJCQkkdmFsCT0kX1BPU1RbJ3ZhbCddOw0KCQkJJG9iaklkCT0kX1BPU1RbJ29iaklkJ107DQoJCQkNCgkJCWVjaG8gIg0KCQkJCWlmKGlzT2JqKG9iaj1nZXRPYmooJyIuJG9iaklkLiInKSkpew0KCQkJCQkNCgkJCQkJcmVzZXRGaWVsZFByZXNlbnRhdGlvbihvYmopOw0KCQkJCSI7DQoNCgkJCQkNCgkJCWlmKCR2YWw9PScnKXsNCgkJCQ0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfUkVRVUlSRUQnXS4iJyk7DQoJCQkJCXNldENsYXNzTmFtZShvYmosJ2ZpZWxkX3JlcXVpcmVkJyk7DQoJCQkJCW9iai5mb2N1cygpOw0KCQkJCQkiOw0KCQkJfQ0KCQkJZWxzZXsNCgkJCQkkc3FsPSdzZWxlY3QgY291bnQoKikgZnJvbSB0X3VzZXJzIHdoZXJlIHVzZXJfbG9naW49IicuJHZhbC4nIic7DQoJCQkJaWYoJGRiLT5Db3VudCgkc3FsKT4wKQ0KCQkJCQllY2hvICINCgkJCQkJCXNldEF0dHJpYnV0ZShvYmosJ290aXRsZScsb2JqLnRpdGxlKTsNCgkJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfVVNFUl9FWElTVFMnXS4iJyk7DQoJCQkJCQlhZGRDbGFzc05hbWUob2JqLCdmaWVsZF9pbl9lcnJvcicpOw0KCQkJCQkJb2JqLmZvY3VzKCk7DQoJCQkJCSI7DQoJCQkJZWxzZXsNCgkJCQkJZWNobyAiDQoJCQkJCQlibGlua1N0eWxlKG9iaiwnZmllbGRfb2snKTsNCgkJCQkJIjsNCgkJCQl9DQoJCQl9DQoJCQllY2hvICINCgkJCX0gLy8gZmluIGlmKGlzT2JqKG9iaikpDQoJCQllbHNlDQoJCQkJYWxlcnQoJ3BhcyB1biBvYmonKyIuJG9iaklkLiIpOw0KCQkJIjsNCgkJDQoJCWJyZWFrOw0KCQkNCgkJY2FzZSAnZ2VuZXJhdGVQYXNzd29yZCc6DQoNCgkJCSRvYmpJZAk9JF9QT1NUWydvYmpJZCddOw0KDQoJCQllY2hvICINCgkJCQlpZihpc09iaihvYmo9Z2V0T2JqKCciLiRvYmpJZC4iJykpKXsNCgkJCQkNCgkJCQlhbGVydCgnIi4kbW90WydFUlJfUEFTU1dPUkRfUkVRVUlSRUQnXS4iJyk7DQoJCQkJDQoJCQkJb2JqLnZhbHVlPSciLnN1YnN0cih1bmlxaWQocmFuZCgpKSwwLHJhbmQoNywxMCkpLiInOw0KCQkJCQ0KCQkJCSI7DQoJCQkJDQoJCQkNCgkJCQkNCgkJCWVjaG8gIg0KCQkJfSAvLyBmaW4gaWYoaXNPYmoob2JqKSkNCgkJCWVsc2UNCgkJCQlhbGVydCgncGFzIHVuIG9iaicrIi4kb2JqSWQuIik7DQoJCQkiOw0KCQkNCgkJY2FzZSAnc2hvdyc6DQoJCQkkd2hhdD0kX1JFUVVFU1RbJ3doYXQnXTsNCg0KCQkJc3dpdGNoKCR3aGF0KXsNCgkJCSAgICBjYXNlICduZXdzJzoNCgkJCSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJuZXdzX2lkIiwkX1BPU1RbJ25ld3NfaWQnXSk7DQoJCQkgICAgICAgIGJyZWFrOw0KCQkJDQoJCQkJY2FzZSAnam91dGV1clByb3AnOg0KCQkJCQkkaWQ9JF9QT1NUWydqb3V0ZXVyX2lkJ107DQoJCQkJCWlmKCFpc19sb2dndWVkKCkgfHwgJGlkIT0kX1NFU1NJT05bJ3VzZXJfaWQnXSl7DQoJCQkJCQkkbWVtYnJlX2lkPSRpZDsNCgkJCQkJCSRfU0VTU0lPTlsnbWVtYnJlX2lkJ109JGlkOw0KCQkJCQkJJF9QT1NUWydtZW1icmVfaWQnXT0kaWQ7DQoJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RldGFpbF9qb3V0ZXVyX3dlYicsJGRiLT5zZWxlY3RGaXJzdCgnU2VsZWN0ICogZnJvbSB0X21lbWJyZXMgd2hlcmUgbWVtYnJlX2lkPScuJGlkKSk7DQoJCQkJCQlzZXNzaW9uX3JlZ2lzdGVyKCRtZW1icmVfaWQpOw0KCSAgICAgICAgICAgICAgICAgICAgJHdoYXQ9J21lbWJyZSc7DQoJCQkJCQkkc21hcnR5LT5hc3NpZ24oImRldGFpbCIsdHJ1ZSk7DQoJCQkJCQkkYWZmPSRzbWFydHktPmZldGNoKCcuL19fYWRtaW5fXy9zaXRlX19fYWRtaW5fX3ByZXNlbnRhdGlvbi4nLlRQTF9FWFQpOw0KCQkJCQkJZGllKCRhZmYpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJZWxzZXsNCgkJCQkJCSR3aGF0PSdtZW1icmUnOw0KCQkJCQkJJF9QT1NUWydtZW1icmVfaWQnXT0kX1NFU1NJT05bJ3VzZXJfaWQnXTsNCgkJCQkJfQ0KICAgICAgICAgICAgICAgICAgICANCgkJCQljYXNlICdtZW1icmUnOg0KCQkJCQkkaWQ9JF9QT1NUWydtZW1icmVfaWQnXTsNCgkJCQkJJG1lbWJyZV9pZD0kaWQ7DQoJCQkJCSRfU0VTU0lPTlsnbWVtYnJlX2lkJ109JGlkOw0KCQkJCQkNCgkJCQkJJHNtYXJ0eS0+YXNzaWduKCR3aGF0LCRkYi0+c2VsZWN0Rmlyc3QoJ1NlbGVjdCAqIGZyb20gdF9tZW1icmVzIHdoZXJlIG1lbWJyZV9pZD0nLiRpZCkpOw0KCQkJCQkNCgkJCQkJc2Vzc2lvbl9yZWdpc3RlcigkbWVtYnJlX2lkKTsNCgkJCQkJYnJlYWs7DQoNCgkJCQljYXNlICdlcXVpcGUnOg0KCQkJCQkkaWQ9JF9QT1NUWydlcXVpcGVfaWQnXTsJCQkJCQ0KCQkJCQkkbWVtYnJlX2lkPSRpZDsNCgkJCQkJJF9TRVNTSU9OWydlcXVpcGVfaWQnXT0kaWQ7DQoJCQkJCWJyZWFrOyANCg0KCQkJCWNhc2UgJ2NvbXBvc2l0aW9uJzoNCgkJCQkJJGlkPSRfUE9TVFsnbWF0Y2hfaWQnXTsJCQkJCQ0KCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RldGFpbF9jb21wb19hZG1pbicsJGlkKTsNCgkJCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCQkJYnJlYWs7DQoJCQkJCSANCgkJCQljYXNlICdldG9pbGUnOg0KCQkJCQkkaWQ9JF9QT1NUWydtYXRjaF9pZCddOwkJCQkJDQoJCQkJCSRzbWFydHktPmFzc2lnbignZGV0YWlsX2V0b2lsZV9hZG1pbicsJGlkKTsNCgkJCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCQkJYnJlYWs7DQoNCgkJCQljYXNlICdzdGFmZic6DQoJCQkJCSRpZD0kX1BPU1RbJ21hdGNoX2lkJ107CQkJCQkNCgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdkZXRhaWxfc3RhZmZfYWRtaW4nLCRpZCk7DQoJCQkJCSRzbWFydHktPmRpc3BsYXkoJy4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fcHJlc2VudGF0aW9uLicuVFBMX0VYVCk7DQoJCQkJCWJyZWFrOw0KCQkJIA0KCQkJCWNhc2UgJ21hdGNoRGV0YWlsJzoNCgkJCQkJJGlkPSRfUE9TVFsnbWF0Y2hfaWQnXTsJCQ0KCQkJCQkkc3FsPSdzZWxlY3QgKiBmcm9tIHRfZXF1aXBlcyBpbm5lciBqb2luIHRfbWF0Y2hzIG9uIGVxdWlwZV9pZD1tYXRjaF9lcXVpcGVfQSBvciBlcXVpcGVfaWQ9bWF0Y2hfZXF1aXBlX0Igd2hlcmUgbWF0Y2hfaWQ9Jy4kaWQ7DQoJCQkJCSRzbWFydHktPmFzc2lnbignZGV0YWlsX21hdGNoJywkZGItPlNlbGVjdEFsbEJ5KCRzcWwsJ2VxdWlwZV9pZCcpKTsNCgkJCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCQkJYnJlYWs7DQoJCQkJCQ0KCQkJCWRlZmF1bHQ6DQoJCQkJCWVjaG8gIk1vdCBjbMOpICIuJF9SRVFVRVNUWyd3aGF0J10uIiBub24gcsOpZsOpcmVuY8OpIjsNCgkJCX0NCg0KCQkJJHNtYXJ0eS0+YXNzaWduKCJkZXRhaWwiLHRydWUpOw0KCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCSRzbWFydHktPmRpc3BsYXkoIi4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fJHdoYXQuIi5UUExfRVhUKTsNCgkJDQoJCQlicmVhazsNCg0KCQljYXNlICdwb3N0JzoNCgkJDQoJCQlzd2l0Y2goJF9SRVFVRVNUWyd3aGF0J10pew0KDQoJCQkgICAgY2FzZSAnc3ViLXVwZGF0ZSc6DQoJCQkgICAgICAgIA0KCQkJICAgICAgICBzd2l0Y2goJF9QT1NUWyd3aWNoJ10pew0KCQkJCQkJY2FzZSAncGFyYW1fZHluJzoNCg0KCQkJCQkJCWZvcmVhY2goJF9QT1NUWydjdXJyJ10gYXMgJGlkPT4kdmFsKXsNCgkJCQkJCQkJaWYoaXNzZXQoJHZhbFsnc2VsZWN0ZWQnXSkpew0KCQkJCQkJCQkJJHNxbC49J0RFTEVURSBmcm9tIHRfZHluX2ltYWdlcyB3aGVyZSBpbWFnZV9pZD0nLiRpZDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCg0KLyoJCQkJCQkJJG5ldz0kZGItPmV4dHJhY3RGaWVsZHMoJF9QT1NULCduZXcnKTsNCg0KCQkJCQkJCWZvcmVhY2goJG5ldyBhcyAka2V5PT4kdmFsKXsNCgkJCQkJCQkJaWYoJHZhbFsncGFyYW1fbmFtZSddIT0nJyAmJiAkdmFsWydwYXJhbV92YWx1ZSddIT0nJykNCgkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X3BhcmFtcyAocGFyYW1fbmFtZSxwYXJhbV92YWx1ZSxwYXJhbV9saWIscGFyYW1fdHlwKSB2YWx1ZXMoIicuJHZhbFsncGFyYW1fbmFtZSddLiciLCInLiR2YWxbJ3BhcmFtX3ZhbHVlJ10uJyIsIicuJHZhbFsncGFyYW1fbGliJ10uJyIsIicuJHZhbFsncGFyYW1fdHlwJ10uJyIpOyc7DQoJCQkJCQkJfQ0KCSovCQkJDQoJCQkJCQkJDQoJCQkJCQkvLwkkZGItPlNlbGVjdCgkc3FsKTsNCg0KCQkJCQkJICAgIGJyZWFrOw0KCQkJCQkJY2FzZSAncGFyYW0nOg0KCQkJCQkJCSRzcWw9J1RSVU5DQVRFIFRBQkxFIHRfcGFyYW1zOyc7DQoJCQkJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydjdXJyJ10pKQ0KCQkJCQkJCQlmb3JlYWNoKCRfUE9TVFsnY3VyciddIGFzICR2YWwpew0KCQkJCQkJCQkJaWYoIWlzc2V0KCR2YWxbJ3NlbGVjdGVkJ10pKQ0KCQkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X3BhcmFtcyAocGFyYW1fbmFtZSxwYXJhbV92YWx1ZSxwYXJhbV9saWIscGFyYW1fdHlwKSB2YWx1ZXMoIicuJHZhbFsncGFyYW1fbmFtZSddLiciLCInLiR2YWxbJ3BhcmFtX3ZhbHVlJ10uJyIsIicuJHZhbFsncGFyYW1fbGliJ10uJyIsIicuJHZhbFsncGFyYW1fdHlwJ10uJyIpOyc7DQoJCQkJCQkJCX0NCg0KCQkJCQkJCSRuZXc9JGRiLT5leHRyYWN0RmllbGRzKCRfUE9TVCwnbmV3Jyk7DQoNCgkJCQkJCQlmb3JlYWNoKCRuZXcgYXMgJGtleT0+JHZhbCl7DQoJCQkJCQkJCWlmKCR2YWxbJ3BhcmFtX25hbWUnXSE9JycgJiYgJHZhbFsncGFyYW1fdmFsdWUnXSE9JycpDQoJCQkJCQkJCQkkc3FsLj0nSU5TRVJUIElOVE8gdF9wYXJhbXMgKHBhcmFtX25hbWUscGFyYW1fdmFsdWUscGFyYW1fbGliLHBhcmFtX3R5cCkgdmFsdWVzKCInLiR2YWxbJ3BhcmFtX25hbWUnXS4nIiwiJy4kdmFsWydwYXJhbV92YWx1ZSddLiciLCInLiR2YWxbJ3BhcmFtX2xpYiddLiciLCInLiR2YWxbJ3BhcmFtX3R5cCddLiciKTsnOw0KCQkJCQkJCX0NCg0KCQkJCQkJCSRkYi0+U2VsZWN0KCRzcWwpOw0KCQkJCQkJCWJyZWFrOw0KDQoJCQkgICAgICAgICAgICBjYXNlICdlcXVpcGVfbm91dmVhdSc6DQoJCQkgICAgICAgICAgICANCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnbWVtYnJlX25vbSddIGFzICRrZXk9PiRub20pew0KCQkJICAgICAgICAgICAgICAgICAgICAkaXRlbT0kX1BPU1RbJ2l0ZW0nXVsnYWRkJ107DQoJCQkgICAgICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgICAgICAkcHJlbm9tID0gJGl0ZW1bJ21lbWJyZV9wcmVub20nXVska2V5XTsNCgkJCSAgICAgICAgICAgICAgICAgICAgJG1haWwgPSAkaXRlbVsnbWVtYnJlX21haWwnXVska2V5XTsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICRpdGVtWydtZW1icmVfcGFzc3dvcmQnXVska2V5XTsNCgkJCSAgICAgICAgICAgICAgICAgICAgDQoJCQkgICAgICAgICAgICAgICAgICAgICRzcWw9J0lOU0VSVCBJTlRPIHRfbWVtYnJlcyAobWVtYnJlX25vbSxtZW1icmVfcHJlbm9tLG1lbWJyZV9lbWFpbCxtZW1icmVfbWQ1LG1lbWJyZV9sb2dpbiknOw0KCQkJICAgICAgICAgICAgICAgICAgICAkc3FsLj0nIHZhbHVlcygiJy4kbm9tLiciLCInLiRwcmVub20uJyIsIicuJG1haWwuJyInOw0KCQkJCQkJCQkkc3FsLj0nLG1kNSgiJy5HUkFJTl9ERV9TQUJMRS4kcHdkLkdSQUlOX0RFX1NBQkxFLiciKSwiJy4oJG5vbS4nXycuJHByZW5vbSkuJyIpOyc7DQoNCgkJCQkJCQkJJGRiLT5JbnNlcnQoJHNxbCk7DQoJCQkJCQkJCQ0KCQkJCQkJCQkkaWQgPSAkZGItPmxhc3RJZDsNCgkJCQkJCQkJDQoJCQkJCQkJCWlmKCRpZCl7DQoJCQkJCQkJCSAgICAkc2Fpc29uX2lkPSRzYWlzb25fY291cmFudGVbJ3NhaXNvbl9pZCddOw0KCQkJCQkJCQkgICAgJGVxdWlwZV9pZDsNCgkJCQkJCQkJICAgICRzcWw9J0lOU0VSVCBJTlRPIHRfbGllbnNfamVzIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgJzsNCgkJCQkJCQkJICAgICRzcWwuPSdWQUxVRVMoIicuJHNhaXNvbl9pZC4nIiwiJy4kX1NFU1NJT05bJ2VxdWlwZV9pZCddLiciLCInLiRpZC4nIik7JzsNCgkJCQkJCQkJICAgIA0KCQkJCQkJCQkgICAgJGRiLT5JbnNlcnQoJHNxbCk7DQoNCgkJCQkJCQkJCWlmKCFlbXB0eSgkbWFpbCkpew0KCQkJCQkJCQkJICAgIGVudm95ZXJNYWlsKCRtYWlsLCRkYi0+U2VsZWN0Rmlyc3QoInNlbGVjdCAqIGZyb20gdF9tZW1icmVzIHdoZXJlIG1lbWJyZV9pZD0kaWQiKSk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBicmVhazsNCgkJCSAgICAgICAgDQoJCQkgICAgICAgICAgICBjYXNlICdqb3V0ZXVyX2xvZ2luJzoNCgkJCSAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgIGlmKGVtcHR5KCRfUE9TVFsncF9sb2dpbiddKSB8fCBlbXB0eSgkX1BPU1RbJ3BfcHdkJ10pKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHdhcm5Mdmw9MzsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd3YXJuTHZsJywkd2Fybkx2bCk7DQoJCQkgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KCQkJCQkJCX0NCg0KCQkJICAgICAgICAgICAgICAgICRzcWw9J1NlbGVjdCBjb3VudCgqKSBhcyBDTlQsbWVtYnJlX2lkIGZyb20gdF9tZW1icmVzIHdoZXJlIG1lbWJyZV9sb2dpbj0iJy4kX1BPU1RbJ3BfbG9naW4nXS4nIiBhbmQgbWVtYnJlX21kNT1tZDUoIicuR1JBSU5fREVfU0FCTEUuJF9QT1NUWydwX3B3ZCddLkdSQUlOX0RFX1NBQkxFLiciKSBncm91cCBieSBtZW1icmVfaWQnOw0KCQkJICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgICRyb3c9JGRiLT5TZWxlY3RGaXJzdCgkc3FsKTsNCgkJCSAgICAgICAgICAgICAgICAkbG9nX3Jlc3VsdD0kcm93WydDTlQnXTsNCgkJCSAgICAgICAgICAgICAgICANCgkJCSAgICAgICAgICAgICAgICAkd2Fybkx2bD0xOw0KCQkJICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgIGlmKCRsb2dfcmVzdWx0PT0wKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydtZW1icmVfbG9naW5fdHJ5J10rKzsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHdhcm5Mdmw9MjsNCgkJCSAgICAgICAgICAgICAgICAgICAgDQoJCQkgICAgICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnbWVtYnJlX2Nvbm5lY3RlZCddKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZXsNCgkJCQkJCQkgICAgJF9TRVNTSU9OWydtZW1icmVfY29ubmVjdGVkJ109JHJvd1snbWVtYnJlX2lkJ107DQoJCQkJCQkJICAgICRzbWFydHktPmFzc2lnbignbWVtYnJlX2Nvbm5lY3RlZCcsJHJvd1snbWVtYnJlX2lkJ10pOw0KCQkJCQkJCX0NCg0KCQkJCQkJCWlmKCRfU0VTU0lPTlsnbWVtYnJlX2xvZ2luX3RyeSddPj0zKQ0KCQkJCQkJCSAgICAkd2Fybkx2bD0xMDsNCg0KCQkJCQkJCSRzbWFydHktPmFzc2lnbignd2Fybkx2bCcsJHdhcm5MdmwpOw0KCQkJICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgIGJyZWFrOw0KCQkJICAgICAgICAgICAgY2FzZSAncGxheWVyX2Fzc28nOg0KCQkJICAgCQkJCSRzcWw9Jyc7DQoJCQkgICAJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydmb25jdGlvbiddWydleGlzdCddKSkNCgkJCQkgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2ZvbmN0aW9uJ11bJ2V4aXN0J10gYXMgJGZvbmN0aW9uX2lkPT4kZm9uY3Rpb24pew0KCQkJCQkJCQkJaWYoaXNzZXQoJGZvbmN0aW9uWydjaGVja2VkJ10pKXsNCgkJCQkJCQkJCSAgICAkc3FsLj0nREVMRVRFIEZST00gdF9saWVuc19tZnMgd2hlcmUgbWZzX2xpZW5faWQ9Jy4kZm9uY3Rpb25faWQuJyBMSU1JVCAxOyc7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCg0KCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydmb25jdGlvbiddWydhZGQnXVsnZm9uY3Rpb25faWQnXSBhcyAkaT0+JGZvbmN0aW9uKXsNCgkJICAgICAgICAgICAgICAgICAgICAJJHNhaXNvbl9pZD0kX1BPU1RbJ2ZvbmN0aW9uJ11bJ2FkZCddWydzYWlzb25faWQnXVskaV07DQoNCgkJCSAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoJGZvbmN0aW9uKSAmJiAkZm9uY3Rpb24hPTAgJiYgJHNhaXNvbl9pZCE9MCl7DQoJCQkgICAgICAgICAgICAgICAgICAgIAkkdGFiPWV4cGxvZGUoJy0nLCRmb25jdGlvbik7DQoJCQkJCQkJCQkkc3FsLj0nSU5TRVJUIElOVE8gdF9saWVuc19tZnMgKGZvbmN0aW9uX2lkLGZvbmN0aW9uX3R5cGVfaWQsc2Fpc29uX2lkLG1lbWJyZV9pZCkgdmFsdWVzKCcuJHRhYlswXS4nLCcuJHRhYlsxXS4nLCcuJHNhaXNvbl9pZC4nLCcuJF9TRVNTSU9OWydtZW1icmVfaWQnXS4nKTsnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJCSRkYi0+VXBkYXRlKCRzcWwpOw0KDQoJCQkgICAgICAgICAgICAJYnJlYWs7DQoNCgkJCSAgICAgICAgICAgIGNhc2UgJ3BsYXllcl9lcXVpcGVfbGlzdCc6DQoJCQkgICAJCQkJJHNxbD0nJzsNCgkJCSAgIAkJCQlpZihpc19hcnJheSgkX1BPU1RbJ3NhaXNvbiddWydleGlzdCddKSkNCgkJCQkgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3NhaXNvbiddWydleGlzdCddIGFzICRzYWlzb25faWQ9PiRzYWlzb24pew0KCQkJCQkJCQkJaWYoJHNhaXNvblsnY2hlY2tlZCddPT0xKXsNCgkJCQkJCQkJCSAgICAkc3FsLj0nREVMRVRFIEZST00gdF9saWVuc19qZXMgd2hlcmUgamVzX2xpZW5faWQ9Jy4kc2Fpc29uWydqZXMnXS4nIExJTUlUIDE7JzsNCgkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJJHNxbC49J1VQREFURSB0X2xpZW5zX2plcyBTRVQgZXF1aXBlX2lkPScuJHNhaXNvblsnZXF1aXBlX2lkJ10uJyB3aGVyZSBqZXNfbGllbl9pZD0nLiRzYWlzb25bJ2plcyddLicgTElNSVQgMTsnOw0KCQkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnc2Fpc29uJ11bJ2FkZCddWydzYWlzb25faWQnXSBhcyAkc2Fpc29uKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoJHNhaXNvbikgJiYgJHNhaXNvbiE9MCl7DQoJCQkgICAgICAgICAgICAgICAgICAgIAkkdGFiPWV4cGxvZGUoJy0nLCRzYWlzb24pOw0KCQkJCQkJCQkJJHNxbC49J0lOU0VSVCBJTlRPIHRfbGllbnNfamVzIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgdmFsdWVzKCcuJHRhYlswXS4nLCcuJHRhYlsxXS4nLCcuJF9TRVNTSU9OWydtZW1icmVfaWQnXS4nKTsnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCSAgICAgICAgICAgIAlicmVhazsNCg0KCQkJICAgICAgICAgICAgY2FzZSAncGxheWVyX2NvYWNoX2xpc3QnOg0KCQkJICAgCQkJCSRzcWw9Jyc7DQoJCQkgICAJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydzYWlzb24nXVsnZXhpc3QnXSkpDQoJCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydzYWlzb24nXVsnZXhpc3QnXSBhcyAkc2Fpc29uX2lkPT4kc2Fpc29uKXsNCgkJCQkJCQkJCWlmKCRzYWlzb25bJ2NoZWNrZWQnXT09MSl7DQoJCQkJCQkJCQkgICAgJHNxbC49J0RFTEVURSBGUk9NIHRfbGllbnNfZWMgd2hlcmUgZWNfbGllbl9pZD0nLiRzYWlzb25bJ2VjJ10uJyBMSU1JVCAxOyc7DQoJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCSRzcWwuPSdVUERBVEUgdF9saWVuc19lYyBTRVQgZXF1aXBlX2lkPScuJHNhaXNvblsnZXF1aXBlX2lkJ10uJyB3aGVyZSBlY19saWVuX2lkPScuJHNhaXNvblsnamVzJ10uJyBMSU1JVCAxOyc7DQoJCQkJCQkJCX0NCg0KCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydzYWlzb24nXVsnYWRkJ11bJ3NhaXNvbl9pZCddIGFzICRzYWlzb24pew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc2Fpc29uKSAmJiAkc2Fpc29uIT0wKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgCSR0YWI9ZXhwbG9kZSgnLScsJHNhaXNvbik7DQoJCQkJCQkJCQkkc3FsLj0nSU5TRVJUIElOVE8gdF9saWVuc19lYyAoc2Fpc29uX2lkLGVxdWlwZV9pZCxtZW1icmVfaWQpIHZhbHVlcygnLiR0YWJbMF0uJywnLiR0YWJbMV0uJywnLiRfU0VTU0lPTlsnbWVtYnJlX2lkJ10uJyk7JzsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCg0KCQkJCQkJCQ0KCQkJCQkJCSRkYi0+VXBkYXRlKCRzcWwpOw0KDQoJCQkgICAgICAgICAgICAJYnJlYWs7DQoNCgkJCSAgICAgICAgICAgIGNhc2UgJ3BsYXllcl9pbmZvJzoNCgkJCQkJCQkNCgkJCQkJCQlpZighZW1wdHkoJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3B3ZCddKSl7DQoJCQkJCQkJLy9PbiB2YWxpZGUgbGEgZmljaGUgZHUgbWVtYnJlIG9uIGRvaXQgZW52b3llciB1biBtYWlsDQoJCQkJCQkJCSRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9tZDUnXT1tZDUoR1JBSU5fREVfU0FCTEUuJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3B3ZCddLkdSQUlOX0RFX1NBQkxFKTsNCgkJCQkJCQkJJHNlbmRfbWFpbD10cnVlOw0KCQkJCQkJCX0NCgkJCQkJCQlpZigkX1BPU1RbJ21lbWJyZSddWydtZW1icmVfcHJvZl9ob21tZSddPT0wKQ0KCQkJCQkJCQkkX1BPU1RbJ21lbWJyZSddWydtZW1icmVfcHJvZl9ob21tZSddPSRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9wcm9mX2hvbW1lX3R4dCddOw0KDQoJCQkJCQkJaWYoJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3Byb2ZfZmVtbWUnXT09MCkNCgkJCQkJCQkJJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3Byb2ZfZmVtbWUnXT0kX1BPU1RbJ21lbWJyZSddWydtZW1icmVfcHJvZl9mZW1tZV90eHQnXTsNCg0KCQkJCQkJCSRfUE9TVFsnbWVtYnJlJ109YWRkc2xhc2hlc19zcWwoJF9QT1NUWydtZW1icmUnXSk7DQoNCgkJCQkJCQkkc3FsPSRkYi0+VXBkYXRlU1FMKCd0X21lbWJyZXMnLCRfUE9TVFsnbWVtYnJlJ10sJ21lbWJyZV9pZD0nLiRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9pZCddKTsNCgkJCQkJCQkkZGItPlVwZGF0ZSgkc3FsKTsNCg0KCQkJCQkJCWlmKCRkYi0+Q291bnQ9PS0xKXsNCgkJCQkJCQkJYWxlcnRBamF4KCdFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIsIHJlw6lzc2F5ZXogcGx1cyB0YXJkJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2V7DQoJCSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRzZW5kX21haWw9PXRydWUgJiYgaXNzZXQoJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX2VtYWlsJ10pKXsNCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95ZXJNYWlsKCRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9lbWFpbCddLCRfUE9TVFsnbWVtYnJlJ10pOw0KCQkgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCgkJDQoJCQ0KCQkJCQkJCQlpZihpc3NldCgkX1BPU1RbJ3NlbGYnXSkpDQoJCQkJCQkJCWVjaG8gIndpbmRvdy5sb2NhdGlvbi5ocmVmPSciLlNJVEVfVVJMLiInOyI7DQoJCQkJCQkJfQ0KDQoJCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdlcXVpcGVfaW5mbyc6DQoJCQkJCQkJJGVxdWlwZVNxbD1hZGRzbGFzaGVzX3NxbCgkX1BPU1RbJ2VxdWlwZSddKTsNCg0KCQkJCQkJCSRzcWw9JGRiLT5VcGRhdGVTUUwoJ3RfZXF1aXBlcycsJGVxdWlwZVNxbCwnZXF1aXBlX2lkPScuJGVxdWlwZVNxbFsnZXF1aXBlX2lkJ10pOw0KDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCQljYXNlICdlcXVpcGVfc2Fpc29uX2xpc3QnOg0KCQkJCQkJICAgICRFX0lEPSRfU0VTU0lPTlsnZXF1aXBlX2lkJ107DQoJCQkgICAJCQkJJHNxbD0nJzsNCgkJCSAgIAkJCQlpZihpc19hcnJheSgkX1BPU1RbJ2l0ZW0nXVsnZXhpc3QnXSkpDQoJCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydpdGVtJ11bJ2V4aXN0J10gYXMgJHNhaXNvbl9pZD0+JHNhaXNvbil7DQoJCQkJCQkJCQlpZigkc2Fpc29uWydjaGVja2VkJ109PTEpew0KCQkJCQkJCQkJICAgICRzcWwuPSdERUxFVEUgRlJPTSB0X2xpZW5zX2VzIHdoZXJlIGVzX2xpZW5faWQ9Jy4kc2Fpc29uWydlcyddLicgTElNSVQgMTsnOw0KCQkJCQkJCQkJICAgICRzcWwuPSdERUxFVEUgRlJPTSB0X2xpZW5zX2plcyB3aGVyZSBzYWlzb25faWQ9Jy4kc2Fpc29uX2lkLicgYW5kIGVxdWlwZV9pZD0nLiRFX0lELic7JzsNCgkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJJHNxbC49J1VQREFURSB0X2xpZW5zX2VzIFNFVCBzYWlzb25fdHlwZT0iJy4kc2Fpc29uWydzYWlzb25fdHlwZSddLiciIHdoZXJlIGVzX2xpZW5faWQ9Jy4kc2Fpc29uWydlcyddLicgTElNSVQgMTsnOw0KCQkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnc2Fpc29uX2lkJ10gYXMgJGtleT0+JHNfaWQpew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc19pZCkgJiYgJHNfaWQhPTApew0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGU9JF9QT1NUWydpdGVtJ11bJ2FkZCddWydzYWlzb25fdHlwZSddWyRrZXldOw0KCQkJCQkJCQkJJHNxbC49J0lOU0VSVCBJTlRPIHRfbGllbnNfZXMgKHNhaXNvbl9pZCxlcXVpcGVfaWQsc2Fpc29uX3R5cGUpIHZhbHVlcygnLiRzX2lkLicsJy4kRV9JRC4nLCInLiR0eXBlLiciKTsnOw0KCQkJCQkJCQkJJHNxbC49J0lOU0VSVCBJTlRPIHRfbGllbnNfamVzIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgU2VsZWN0ICcuJHNfaWQuJywnLiRFX0lELicsIG1lbWJyZV9pZCBmcm9tIHRfbGllbnNfamVzIHdoZXJlIHNhaXNvbl9pZD0nLigkc19pZC0xKS4nIGFuZCBlcXVpcGVfaWQ9Jy4kRV9JRC4nOyc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCSAgICAgICAgICAgIAlicmVhazsNCg0KCQkJCQkJY2FzZSAnZXF1aXBlX2NvYWNoX2xpc3QnOg0KCQkJICAgCQkJCSRzcWw9Jyc7DQoJCQkgICAJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydpdGVtJ11bJ2V4aXN0J10pKQ0KCQkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydleGlzdCddIGFzICRsX2lkPT4kc2Fpc29uKXsNCgkJCQkJCQkJCWlmKCRzYWlzb25bJ2NoZWNrZWQnXT09MSl7DQoJCQkJCQkJCQkgICAgJHNxbC49J0RFTEVURSBGUk9NIHRfbGllbnNfZWMgd2hlcmUgZWNfbGllbl9pZD0nLiRsX2lkLicgTElNSVQgMTsnOw0KCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQkkc3FsLj0nVVBEQVRFIHRfbGllbnNfZWMgU0VUIG1lbWJyZV9pZD0nLiRzYWlzb25bJ21lbWJyZV9pZCddLicgd2hlcmUgZWNfbGllbl9pZD0nLiRsX2lkLicgTElNSVQgMTsnOw0KCQkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnc2Fpc29uX2lkJ10gYXMgJGtleT0+JHNfaWQpew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc19pZCkgJiYgJHNfaWQhPTApew0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJG1faWQ9JF9QT1NUWydpdGVtJ11bJ2FkZCddWydtZW1icmVfaWQnXVska2V5XTsNCgkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X2xpZW5zX2VjIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgdmFsdWVzKCcuJHNfaWQuJywnLiRfU0VTU0lPTlsnZXF1aXBlX2lkJ10uJywnLiRtX2lkLicpOyc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoNCgkJCQkJCQkkZGItPlVwZGF0ZSgkc3FsKTsNCg0KCQkJICAgICAgICAgICAgCWJyZWFrOw0KDQoJCQkJCQljYXNlICdlcXVpcGVfam91dGV1cl9saXN0JzoNCgkJCSAgIAkJCQkkc3FsPScnOw0KCQkJICAgCQkJCWlmKGlzX2FycmF5KCRfUE9TVFsnaXRlbSddWydleGlzdCddKSkNCgkJCQkgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2l0ZW0nXVsnZXhpc3QnXSBhcyAkbF9pZD0+JHNhaXNvbil7DQoJCQkJCQkJCQlpZigkc2Fpc29uWydjaGVja2VkJ109PTEpew0KCQkJCQkJCQkJICAgICRzcWwuPSdERUxFVEUgRlJPTSB0X2xpZW5zX2plcyB3aGVyZSBqZXNfbGllbl9pZD0nLiRsX2lkLicgTElNSVQgMTsnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJDQoJCQkJCQkJCX0NCg0KCQkJCQkJCSRzcWwuPSdVcGRhdGUgdF9saWVuc19qZXMgc2V0IHJlc3BvbnNhYmxlPTAgd2hlcmUgZXF1aXBlX2lkPScuJF9TRVNTSU9OWydlcXVpcGVfaWQnXS4nOyc7DQoNCgkJCQkJCQlpZihpc19hcnJheSgkX1BPU1RbJ2l0ZW0nXVsnZXhpc3QnXVsncmVzcG9uc2FibGUnXSkpDQoJCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydpdGVtJ11bJ2V4aXN0J11bJ3Jlc3BvbnNhYmxlJ10gYXMgJG1faWQ9PiR0YWIpew0KCQkJCSAgICAgICAgICAgICAgICAgICAgJHRhYj1leHBsb2RlKCctJywkdGFiKTsNCgkJCQkJCQkJICAgICRzcWwuPSJVcGRhdGUgdF9saWVuc19qZXMgc2V0IHJlc3BvbnNhYmxlPTEgd2hlcmUgc2Fpc29uX2lkPSR0YWJbMF0gYW5kIG1lbWJyZV9pZD0kdGFiWzFdOyI7DQoJCQkJCQkJCX0NCg0KCQkJCQkJCQkNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnc2Fpc29uX2lkJ10gYXMgJGtleT0+JHNfaWQpew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc19pZCkgJiYgJHNfaWQhPTApew0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJG1faWQ9JF9QT1NUWydpdGVtJ11bJ2FkZCddWydtZW1icmVfaWQnXVska2V5XTsNCgkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X2xpZW5zX2plcyAoc2Fpc29uX2lkLGVxdWlwZV9pZCxtZW1icmVfaWQpIHZhbHVlcygnLiRzX2lkLicsJy4kX1NFU1NJT05bJ2VxdWlwZV9pZCddLicsJy4kbV9pZC4nKTsnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCSAgICAgICAgICAgIAlicmVhazsNCg0KCQkJICAgICAgICB9DQoJCQkJCSRzbWFydHktPmFzc2lnbigncHJlc2VudGF0aW9uRHluYW1pcXVlJywkX1BPU1RbJ3dpY2gnXSk7DQoJCQkJCSRzbWFydHktPmRpc3BsYXkoJy4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fcHJlc2VudGF0aW9uLicuVFBMX0VYVCk7DQoNCgkJCSAgICAgICAgYnJlYWs7DQoJCQkJY2FzZSAnZXF1aXBlJzoNCgkJCQkJDQoJCQkJYnJlYWs7IA0KCQkJCQ0KCQkJCWNhc2UgJ2NvbXBvc2l0aW9uJzoNCgkJCQkJDQoJCQkJCSRtaWQ9JF9QT1NUWydjb21wbyddWydtYXRjaF9pZCddOyANCgkJCQkJJF9QT1NUWydjb21wbyddPWFkZHNsYXNoZXNfc3FsKCRfUE9TVFsnY29tcG8nXSk7DQoJCQkJCQ0KCQkJCQkkc3FsPSJERUxFVEUgRlJPTSB0X2NvbXBvcyB3aGVyZSBjb21wb19tYXRjaF9pZD0iLiRtaWQuIjsiOw0KCQkJCQkNCgkJCQkJDQoJCQkJCWZvcmVhY2goc3BsaXQoJywnLCRfUE9TVFsnY29tcG9fQSddKSBhcyAkdmFsKXsNCgkJCQkJCWlmKCR2YWwpDQoJCQkJCQkJJHNxbC49IklOU0VSVCBJTlRPIHRfY29tcG9zIFZBTFVFUygnJywnIi4kbWlkLiInLCciLiR2YWwuIicpOyI7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaChzcGxpdCgnLCcsJF9QT1NUWydjb21wb19CJ10pIGFzICR2YWwpew0KCQkJCQkJaWYoJHZhbCkNCgkJCQkJCQkkc3FsLj0iSU5TRVJUIElOVE8gdF9jb21wb3MgVkFMVUVTKCcnLCciLiRtaWQuIicsJyIuJHZhbC4iJyk7IjsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJGRiLT5JbnNlcnQoJHNxbCk7DQoJCQkJCQ0KCQkJCQlpZigkZGItPkNvdW50PT0tMSl7DQoJCQkJCQlhbGVydEFqYXgoJ0VycmV1ciBsb3JzIGRlIGxhIG1pc2Ugw6Agam91ciwgcmXDqXNzYXlleiBwbHVzIHRhcmQnKTsNCgkJCQkJfQ0KCQkJCQllbHNlew0KCQkJCQkJJHNxbD0ic2VsZWN0IGNvdW50KCopIGZyb20gdF9jb21wb3Mgd2hlcmUgY29tcG9fbWF0Y2hfaWQ9JG1pZCI7DQoJCQkJCQkkY250PSRkYi0+Q291bnQoJHNxbCk7DQoJCQkJCQllY2hvICINCgkJCQkJCQkvLyBPbiBjYWNoZQ0KCQkJCQkJCSQoJ2V0b2lsZV9idXR0b24kbWlkJykuZGlzYWJsZWQ9KCRjbnQ9PTAgPyB0cnVlOiBmYWxzZSk7DQoJCQkJCQkJRWxlbWVudC50b2dnbGUoJ2ljJyk7DQoJCQkJCQkJLy8gT24gYXZlcnRpcw0KCQkJCQkJCWFsZXJ0KCdNaXNlIMOgIGpvdXIgZWZmZWN0dcOpZSBhdmVjIHN1Y2PDqXMnKTsNCgkJCQkJCQkvLyBPbiBlbMOodmUgbGUgZm9ybXVsYWlyZSANCgkJCQkJCQkkKCdpYycpLmlubmVySFRNTD1cIlwiOw0KCQkJCQkJCSQoJ2V0b2lsZV9idXR0b24kbWlkJykuY2xpY2soJCgnZXRvaWxlX2J1dHRvbiRtaWQnKSk7DQoJCQkJCQkJIjsNCgkJCQkJfQ0KLyogKi8JCQkJDQoJCQkJYnJlYWs7IA0KCQkJCQ0KCQkJCWNhc2UgJ2V0b2lsZSc6DQoNCgkJCQkJJG1pZD0kX1BPU1RbJ21hdGNoX2lkJ107IA0KCQkJCQkkX1BPU1RbJ2V0b2lsZSddPWFkZHNsYXNoZXNfc3FsKCRfUE9TVFsnZXRvaWxlJ10pOw0KCQkJCQkkX1BPU1RbJ3R5cGUnXQkJPXNwbGl0KCcsJywkX1BPU1RbJ3R5cGUnXSk7DQoJCQkJCSRfUE9TVFsnam91dGV1ciddCT1zcGxpdCgnLCcsJF9QT1NUWydqb3V0ZXVyJ10pOw0KCQkJCQkNCgkJCQkJJHNxbD0iREVMRVRFIEZST00gdF9ldG9pbGVzIHdoZXJlIGV0b2lsZV9tYXRjaF9pZD0iLiRtaWQuIjsiOw0KCQkJCQkNCgkJCQkJZm9yZWFjaCgkX1BPU1RbJ3R5cGUnXSBhcyAka2V5PT4kdmFsKXsNCgkJCQkJCQ0KCQkJCQkJaWYoJF9QT1NUWydqb3V0ZXVyJ11bJGtleV0+MCkNCgkJCQkJCQkkc3FsLj0iSU5TRVJUIElOVE8gdF9ldG9pbGVzIFZBTFVFUygnJywkbWlkLCIuJF9QT1NUWydqb3V0ZXVyJ11bJGtleV0uIiwkdmFsKTsiOwkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSRkYi0+SW5zZXJ0KCRzcWwpOw0KCQkJCQlpZigkZGItPkNvdW50PT0tMSl7DQoJCQkJCQlhbGVydEFqYXgoJ0VycmV1ciBsb3JzIGRlIGxhIG1pc2Ugw6Agam91ciwgcmXDqXNzYXlleiBwbHVzIHRhcmQnKTsNCgkJCQkJfQ0KCQkJCQllbHNlew0KCQkJCQkJZWNobyAiDQoJCQkJCQkJLy8gT24gY2FjaGUNCgkJCQkJCQlFbGVtZW50LnRvZ2dsZSgnaWMnKTsNCgkJCQkJCQkvLyBPbiBhdmVydGlzDQoJCQkJCQkJYWxlcnQoJ01pc2Ugw6Agam91ciBlZmZlY3R1w6llIGF2ZWMgc3VjY8OpcycpOw0KCQkJCQkJCS8vIE9uIGVsw6h2ZSBsZSBmb3JtdWxhaXJlIA0KCQkJCQkJCSQoJ2ljJykuaW5uZXJIVE1MPVwiXCI7DQoJCQkJCQkJIjsNCgkJCQkJfQ0KLyogKi8JCQkJDQoJCQkJYnJlYWs7IA0KCQkJCQ0KCQkJCWNhc2UgJ3N0YWZmJzoNCg0KCQkJCQkkbWlkPSRfUE9TVFsnc3RhZmYnXVsnbWF0Y2hfaWQnXTsNCgkJCQkJJGRiLT5VcGRhdGUoJGRiLT5VcGRhdGVTUUwoJ3RfbWF0Y2hzJywkX1BPU1RbJ3N0YWZmJ10sJ21hdGNoX2lkPScuJG1pZCkpOw0KDQoJCQkJCWlmKCRkYi0+Q291bnQ9PS0xKXsNCgkJCQkJCWFsZXJ0QWpheCgnRXJyZXVyIGxvcnMgZGUgbGEgbWlzZSDDoCBqb3VyLCByZcOpc3NheWV6IHBsdXMgdGFyZCcpOw0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQllY2hvICINCgkJCQkJCQkvLyBPbiBjYWNoZQ0KCQkJCQkJCUVsZW1lbnQudG9nZ2xlKCdpYycpOw0KCQkJCQkJCS8vIE9uIGF2ZXJ0aXMNCgkJCQkJCQlhbGVydCgnTWlzZSDDoCBqb3VyIGVmZmVjdHXDqWUgYXZlYyBzdWNjw6lzJyk7DQoJCQkJCQkJLy8gT24gZWzDqHZlIGxlIGZvcm11bGFpcmUgDQoJCQkJCQkJJCgnaWMnKS5pbm5lckhUTUw9XCJcIjsNCgkJCQkJCQkiOw0KCQkJCQl9DQoJCQkJDQoJCQkJYnJlYWs7IA0KCQkJfQ0KCQkJCQkNCgkJCWJyZWFrOw0KCQkNCgkJZGVmYXVsdDoNCgkJCWJvdWdlX2RlX2xhKCcuLycpOw0KCX0NCg0KPz4NCg==]]></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" state="enabled" id="24800002"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="5"><breakpoint type="line" filename="file:///C:/JP/EasyPHP/www/lolita/index.php" lineno="20" state="enabled" hit_count="0" hit_condition="&gt;=" hit_value="0" id="24800002"></breakpoint></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="6" status="stopped" reason="ok"></response>
      Send: run -i 7
      ----
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///c:/jp/easyphp/www/lolita/ajax.php" language="PHP" protocol_version="1.0" appid="2480" idekey="default"><engine version="2.0.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright></init>
      Send: source -i 1 -f file:///c:/jp/easyphp/www/lolita/ajax.php
      Send: feature_set -i 2 -n max_depth -v 3
      Send: feature_set -i 3 -n max_children -v 15
      Send: breakpoint_set -i 4 -t line -f file:///C:/JP/EasyPHP/www/lolita/index.php -n 20 -s enabled -h 0 -o >=
      Send: breakpoint_list -i 5
      Send: run -i 6
      ----
      ----
      ----
      ----
      ----
      ----
      ----
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="source" transaction_id="1" encoding="base64"><![CDATA[PD9waHANCgkvLyBQb3VyIGZvcmNlciBsYSBib25uZSBpbnRlcnByZXRhdGlvbiBkZXMgY2FyYWN0w6hyZXMNCgloZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iik7DQoNCglyZXF1aXJlX29uY2UoJy4vbGliL2Jhc2UuaW5jJyk7DQoNCi8vCSRzbWFydHktPnRlbXBsYXRlX2Rpcj0kbW90Wyd0cGxfcGF0aCddLidfX2FkbWluX18vJzsNCg0KCWZ1bmN0aW9uIGFsZXJ0QWpheCgkdHh0LCRpPTEpew0KCQlpZigkaT09MSkNCgkJCWVjaG8gImFsZXJ0KCciLmFkZHNsYXNoZXMoJHR4dCkuIicpOyI7DQoJCWVsc2UNCgkJCWVjaG8gIm5ldyBJbnNlcnRpb24uQm90dG9tKCdpYycsJyIuYWRkc2xhc2hlcygkdHh0KS4iJyk7IjsNCgl9DQoNCg0KCWZ1bmN0aW9uIGVudm95ZXJNYWlsKCRtYWlsLCRtZW1icmUpew0KCSAgICBnbG9iYWwgJHNtYXJ0eTsNCgkJJHNtYXJ0eS0+YXNzaWduKCdtZW1icmUnLCRtZW1icmUpOw0KCQkkc21hcnR5LT5hc3NpZ24oJ3Byb2ZpbF9tb2RpZmljYXRpb25fbWFpbCcsdHJ1ZSk7DQoJCSRtZXNzYWdlPSRzbWFydHktPmZldGNoKCcuL19fYWRtaW5fXy9zaXRlX19fYWRtaW5fX3ByZXNlbnRhdGlvbnMuJy5UUExfRVhUKTsNCgkJJGhlYWRlcnM9IiI7DQoJCSRoZWFkZXJzLj0iRk9STTogd2VibWFzdGVyQGFzc29jaWF0aW9uLWxvbGl0YS5jb21cbiI7DQoJCSRoZWFkZXJzLj0iQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI7DQoNCgkJbWFpbCgkbWFpbCwnVG9uIHByb2ZpbCBlbiBsaWduZSDDoCBsYSBMT0xJVEEnLCRtZXNzYWdlLCRoZWFkZXJzKTsNCgl9DQoNCglpZighaXNzZXQoJF9SRVFVRVNUWydhY3Rpb24nXSkpDQoJCWJvdWdlX2RlX2xhKCcuLycpOwkJDQoJJHNhaXNvbl9jb3VyYW50ZT0kZGItPlNlbGVjdEZpcnN0KCdzZWxlY3QgKiBmcm9tIHRfc2Fpc29ucyB3aGVyZSBzYWlzb25fY291cmFudGU9MScpOw0KCSRzbWFydHktPmFzc2lnbignc2Fpc29uX2NvdXJhbnRlJywkc2Fpc29uX2NvdXJhbnRlKTsNCg0KCXN3aXRjaCgkX1JFUVVFU1RbJ2FjdGlvbiddKXsNCgkgICAgY2FzZSAnZHluJzoNCgkgICAgCXN3aXRjaCgkX1JFUVVFU1RbJ3doYXQnXSl7DQoJICAgIAkgICAgY2FzZSAncGljJzoNCgkgICAgCSAgICANCgkgICAgCSAgICAgICAgJHR5cGU9JF9HRVRbJ2ltYWdlX3R5cGUnXTsNCgkJCQkJDQoJCQkJCWlmICgkdHlwZT09MCkgJHR5cGU9MTsNCgkgICAgCSAgICAgICAgDQoJICAgIAkgICAgICAgICRzcWw9J3NlbGVjdCBpbWFnZV9pZCxpbWFnZV9leHQgZnJvbSB0X2R5bl9pbWFnZXMgd2hlcmUgaW1hZ2VfdHlwZT0nLiR0eXBlLicgb3JkZXIgYnkgcmFuZCgpIExJTUlUIDEnOw0KDQoJICAgIAkgICAgICAgICRmaXJzdD0kZGItPlNlbGVjdEZpcnN0KCRzcWwpOw0KCSAgICAJICAgICAgICANCgkgICAgCSAgICAgICAgJHBhdGggPSAkcGFyYW1bJ3JlcF9keW4nXS4nL2ltYWdlJy4kZmlyc3RbJ2ltYWdlX2lkJ10uJy4nLiRmaXJzdFsnaW1hZ2VfZXh0J107DQoJICAgIAkgICAgICAgIA0KCQkJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogaW1hZ2UvIi4kZmlyc3RbJ2ltYWdlX2V4dCddKTsNCgkJCQkJDQoJCQkJCSRmZCA9IGZvcGVuKCRwYXRoLCdyJyk7DQoJCQkJCQl3aGlsZSAoIWZlb2YoJGZkKSkgew0KCQkJCQkJJGJ1ZmZlciA9IGZnZXRzKCRmZCwgNDA5Nik7DQoJCQkJCQllY2hvICRidWZmZXI7DQoJCQkJCX0NCgkJCQkJZmNsb3NlICgkZmQpOw0KCQkJCQkNCgkgICAgCSAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgY2FzZSAnY2FwdHVyZSc6DQoJCQkJCSRzbWFydHktPmFzc2lnbigncHJlc2VudGF0aW9uRHluYW1pcXVlJywkX1BPU1RbJ2NhcHR1cmUnXSk7DQoJCQkJCSRzbWFydHktPmRpc3BsYXkoJy4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fcHJlc2VudGF0aW9uLicuVFBMX0VYVCk7DQoJICAgICAgICAgICAgICAgIGJyZWFrOw0KCSAgICAgICAgICAgIGNhc2UgJ2NvbWJvLXRlYW0tbGlzdCc6DQoJICAgICAgICAgICAgDQoJICAgICAgICAgICAgaWYoJF9QT1NUWydzYWlzb25faWQnXSE9Jycpew0KCQkgICAgICAgICAgICAkc3FsPScNCgkJCQkJCXNlbGVjdCAqIGZyb20gdF9lcXVpcGVzIGFzIHRfZQ0KCQkJCQkJaW5uZXIgam9pbiB0X2xpZW5zX2VzDQoJCQkJCQlVU0lORyhlcXVpcGVfaWQpDQoJCQkJCQlXSEVSRSBzYWlzb25faWQ9Jy4kX1BPU1RbJ3NhaXNvbl9pZCddOw0KDQoJCSAgICAgICAgICAgICR0ZWFtcz0kZGItPlNlbGVjdEFsbEJ5KCRzcWwsJ2VxdWlwZV9pZCcpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJICAgICR0ZWFtcz1hcnJheSgpOw0KCQkJCSAgICANCgkJCQllY2hvICINCgkJCQkgICAgdmFyIGNvbWJvID0gJCgnJF9QT1NUW3RhcmdldF0nKTsNCgkJCQkgICAgY29tYm8ub3B0aW9ucy5sZW5ndGg9MDsNCgkJCQkgICAgdmFyIGRlZj0wOw0KCQkJCSAgICB2YXIgdmFsZXVyPTA7DQoJCQkJCSI7DQoJCQkJJG9wdGlvbnM9Jyc7DQoJCQ0KCQkJCWlmKCRfUE9TVFsndmFsTnVsbCddPT10cnVlKQ0KCQkJCQkkb3B0aW9ucy49J2NvbWJvLm9wdGlvbnNbY29tYm8ub3B0aW9ucy5sZW5ndGhdPW5ldyBPcHRpb24oIi0iLCIwIix0cnVlLHRydWUpOyc7DQoJCQkJDQoJCQkJZm9yZWFjaCgkdGVhbXMgYXMgJGlkPT4kdGVhbSl7DQoJCQkJICAgICRvcHRpb25zLj0nY29tYm8ub3B0aW9uc1tjb21iby5vcHRpb25zLmxlbmd0aF09bmV3IE9wdGlvbigiJy4kdGVhbVtlcXVpcGVfbm9tXS4nIiwiJy4kaWQuJyIsJy4oJGlkPT0kX1BPU1RbJ2RlZlZhbHVlJ10/ICd0cnVlLHRydWUnIDonZmFsc2UsZmFsc2UnKS4nKTsnOw0KCQkJCSAgICBpZigkaWQ9PSRfUE9TVFsnZGVmVmFsdWUnXSkNCgkJCQkgICAgCSRvcHRpb25zLj0nDQoJCQkJCQkJZGVmPWNvbWJvLm9wdGlvbnMubGVuZ3RoLTE7DQoJCQkJCQkJdmFsZXVyPScuJGlkLic7DQoJCQkJCQknOw0KCQkJCQkvLyRvcHRpb25zLj0oJGlkPT0kX1BPU1RbJ2RlZlZhbHVlJ10gPyAnY29tYm8ub3B0aW9ucy5zZWxlY3RlZEluZGV4PWNvbWJvLm9wdGlvbnMubGVuZ3RoOyc6JycpOw0KCQkJCSAgICB9DQoNCgkJCQlpZigkb3B0aW9ucz09JycpDQoJCQkJICAgICRvcHRpb25zPSdjb21iby5vcHRpb25zW2NvbWJvLm9wdGlvbnMubGVuZ3RoXT1uZXcgT3B0aW9uKCJBdWN1bmUiLCIiLHRydWUsdHJ1ZSk7JzsNCgkJCQllbHNlDQoJCQkJCSRvcHRpb25zLj0nDQoJCQkJCQljb21iby5zZWxlY3RlZEluZGV4PWRlZjsNCgkJCQkJCWNvbWJvLnZhbHVlPXZhbGV1cjsnOw0KCQkJCQkNCgkJCQllY2hvICRvcHRpb25zOw0KDQoJICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICB9DQoJICAgICAgICANCgkgICAgICAgIGJyZWFrOw0KCQljYXNlICd0ZXN0JzoNCgkJCQ0KCQkJYnJlYWs7DQoJCWNhc2UgJ2dyb3VwQWRkJzoNCgkJCSR2YWwJPSRfUE9TVFsndmFsJ107DQoJCQkkb2JqSWQJPSRfUE9TVFsnb2JqSWQnXTsNCgkJCQ0KCQkJZWNobyAiDQoJCQkJaWYob2JqPWdldE9iaignIi4kb2JqSWQuIicpKXsNCgkJCQkJcmVzZXRGaWVsZFByZXNlbnRhdGlvbihvYmopOw0KCQkJCSI7DQoJCQkNCgkJCWlmKCR2YWw9PScnKXsNCgkJCQ0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfUkVRVUlSRUQnXS4iJyk7DQoJCQkJCXNldENsYXNzTmFtZShvYmosJ2ZpZWxkX3JlcXVpcmVkJyk7DQoJCQkJCW9iai5mb2N1cygpOw0KCQkJCQkiOw0KCQkJfQ0KCQkJZWxzZXsNCgkJCQkkc3FsPSdzZWxlY3QgY291bnQoKikgZnJvbSB0X2dyb3VwcyB3aGVyZSBncm91cF9uYW1lPSInLiR2YWwuJyInOw0KCQkJCWlmKCRkYi0+Q291bnQoJHNxbCk+MCkNCgkJCQkJZWNobyAiDQoJCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCd0aXRsZScsJyIuJG1vdFsnRVJSX0dST1VQX0VYSVNUUyddLiInKTsNCgkJCQkJCWFkZENsYXNzTmFtZShvYmosJ2ZpZWxkX2luX2Vycm9yJyk7DQoJCQkJCQlvYmouZm9jdXMoKTsNCgkJCQkJIjsNCgkJCQllbHNlew0KCQkJCQllY2hvICINCgkJCQkJCWJsaW5rU3R5bGUob2JqLCdmaWVsZF9vaycpOw0KCQkJCQkiOw0KCQkJCX0NCgkJCX0NCgkJCWVjaG8gIg0KCQkJfSAvLyBmaW4gaWYoaXNPYmoob2JqKSkNCgkJCWVsc2UNCgkJCQlhbGVydCgncGFzIHVuIG9iaicrIi4kb2JqSWQuIik7DQoJCQkiOw0KCQkNCgkJY2FzZSAnY2hlY2tGaWVsZCc6DQoJCQkkdmFsCT0kX1BPU1RbJ3ZhbCddOw0KCQkJJG9iaklkCT0kX1BPU1RbJ29iaklkJ107DQoJCQkkb2JsaWcJPSRfUkVRVUVTVFsnb2JsaWcnXTsNCgkJCSRtYXgJPSRfUkVRVUVTVFsnbWF4J107DQoJCQkkbWluCT0kX1JFUVVFU1RbJ21pbiddOw0KDQoJCQllY2hvICINCgkJCQlpZihvYmo9Z2V0T2JqKCciLiRvYmpJZC4iJykpew0KCQkJCQlyZXNldEZpZWxkUHJlc2VudGF0aW9uKG9iaik7DQoJCQkJIjsNCgkJCQ0KCQkJaWYoaXNzZXQoJG9ibGlnKSAmJiBzdHJfcmVwbGFjZSgnICcsJycsJHZhbCk9PScnKXsNCgkJCQllY2hvICINCgkJCQkJc2V0QXR0cmlidXRlKG9iaiwnb3RpdGxlJyxvYmoudGl0bGUpOw0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCd0aXRsZScsJyIuJG1vdFsnRVJSX0ZJRUxEX1JFUVVJUkVEJ10uIicpOw0KCQkJCQlzZXRDbGFzc05hbWUob2JqLCdmaWVsZF9yZXF1aXJlZCcpOw0KCQkJCQlvYmouZm9jdXMoKTsNCgkJCQkJIjsNCgkJCX0NCgkJCWVsc2UgaWYoaXNzZXQoJG1pbikgJiYgc3RybGVuKCR2YWwpPCRtaW4pew0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfVE9PX1NIT1JUJ10uIicpOw0KCQkJCQlzZXRDbGFzc05hbWUob2JqLCdmaWVsZF9yZXF1aXJlZCcpOw0KCQkJCQlvYmouZm9jdXMoKTsNCgkJCQkJIjsNCgkJCX0NCgkJCWVsc2UgaWYoaXNzZXQoJG1heCkgJiYgc3RybGVuKCR2YWwpPiRtYXgpew0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfVE9PX0xPTkcnXS4iJyk7DQoJCQkJCXNldENsYXNzTmFtZShvYmosJ2ZpZWxkX3JlcXVpcmVkJyk7DQoJCQkJCW9iai5mb2N1cygpOw0KCQkJCQkiOw0KCQkJfQ0KCQkJCQkJCQ0KCQkJZWNobyAifTsiOw0KCQkJCQkNCgkJCWJyZWFrOwkNCgkJDQoJCWNhc2UgJ3VzZXInOg0KCQkJDQoJCQkkdmFsCT0kX1BPU1RbJ3ZhbCddOw0KCQkJJG9iaklkCT0kX1BPU1RbJ29iaklkJ107DQoJCQkNCgkJCWVjaG8gIg0KCQkJCWlmKGlzT2JqKG9iaj1nZXRPYmooJyIuJG9iaklkLiInKSkpew0KCQkJCQkNCgkJCQkJcmVzZXRGaWVsZFByZXNlbnRhdGlvbihvYmopOw0KCQkJCSI7DQoNCgkJCQkNCgkJCWlmKCR2YWw9PScnKXsNCgkJCQ0KCQkJCWVjaG8gIg0KCQkJCQlzZXRBdHRyaWJ1dGUob2JqLCdvdGl0bGUnLG9iai50aXRsZSk7DQoJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfRklFTERfUkVRVUlSRUQnXS4iJyk7DQoJCQkJCXNldENsYXNzTmFtZShvYmosJ2ZpZWxkX3JlcXVpcmVkJyk7DQoJCQkJCW9iai5mb2N1cygpOw0KCQkJCQkiOw0KCQkJfQ0KCQkJZWxzZXsNCgkJCQkkc3FsPSdzZWxlY3QgY291bnQoKikgZnJvbSB0X3VzZXJzIHdoZXJlIHVzZXJfbG9naW49IicuJHZhbC4nIic7DQoJCQkJaWYoJGRiLT5Db3VudCgkc3FsKT4wKQ0KCQkJCQllY2hvICINCgkJCQkJCXNldEF0dHJpYnV0ZShvYmosJ290aXRsZScsb2JqLnRpdGxlKTsNCgkJCQkJCXNldEF0dHJpYnV0ZShvYmosJ3RpdGxlJywnIi4kbW90WydFUlJfVVNFUl9FWElTVFMnXS4iJyk7DQoJCQkJCQlhZGRDbGFzc05hbWUob2JqLCdmaWVsZF9pbl9lcnJvcicpOw0KCQkJCQkJb2JqLmZvY3VzKCk7DQoJCQkJCSI7DQoJCQkJZWxzZXsNCgkJCQkJZWNobyAiDQoJCQkJCQlibGlua1N0eWxlKG9iaiwnZmllbGRfb2snKTsNCgkJCQkJIjsNCgkJCQl9DQoJCQl9DQoJCQllY2hvICINCgkJCX0gLy8gZmluIGlmKGlzT2JqKG9iaikpDQoJCQllbHNlDQoJCQkJYWxlcnQoJ3BhcyB1biBvYmonKyIuJG9iaklkLiIpOw0KCQkJIjsNCgkJDQoJCWJyZWFrOw0KCQkNCgkJY2FzZSAnZ2VuZXJhdGVQYXNzd29yZCc6DQoNCgkJCSRvYmpJZAk9JF9QT1NUWydvYmpJZCddOw0KDQoJCQllY2hvICINCgkJCQlpZihpc09iaihvYmo9Z2V0T2JqKCciLiRvYmpJZC4iJykpKXsNCgkJCQkNCgkJCQlhbGVydCgnIi4kbW90WydFUlJfUEFTU1dPUkRfUkVRVUlSRUQnXS4iJyk7DQoJCQkJDQoJCQkJb2JqLnZhbHVlPSciLnN1YnN0cih1bmlxaWQocmFuZCgpKSwwLHJhbmQoNywxMCkpLiInOw0KCQkJCQ0KCQkJCSI7DQoJCQkJDQoJCQkNCgkJCQkNCgkJCWVjaG8gIg0KCQkJfSAvLyBmaW4gaWYoaXNPYmoob2JqKSkNCgkJCWVsc2UNCgkJCQlhbGVydCgncGFzIHVuIG9iaicrIi4kb2JqSWQuIik7DQoJCQkiOw0KCQkNCgkJY2FzZSAnc2hvdyc6DQoJCQkkd2hhdD0kX1JFUVVFU1RbJ3doYXQnXTsNCg0KCQkJc3dpdGNoKCR3aGF0KXsNCgkJCSAgICBjYXNlICduZXdzJzoNCgkJCSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJuZXdzX2lkIiwkX1BPU1RbJ25ld3NfaWQnXSk7DQoJCQkgICAgICAgIGJyZWFrOw0KCQkJDQoJCQkJY2FzZSAnam91dGV1clByb3AnOg0KCQkJCQkkaWQ9JF9QT1NUWydqb3V0ZXVyX2lkJ107DQoJCQkJCWlmKCFpc19sb2dndWVkKCkgfHwgJGlkIT0kX1NFU1NJT05bJ3VzZXJfaWQnXSl7DQoJCQkJCQkkbWVtYnJlX2lkPSRpZDsNCgkJCQkJCSRfU0VTU0lPTlsnbWVtYnJlX2lkJ109JGlkOw0KCQkJCQkJJF9QT1NUWydtZW1icmVfaWQnXT0kaWQ7DQoJCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RldGFpbF9qb3V0ZXVyX3dlYicsJGRiLT5zZWxlY3RGaXJzdCgnU2VsZWN0ICogZnJvbSB0X21lbWJyZXMgd2hlcmUgbWVtYnJlX2lkPScuJGlkKSk7DQoJCQkJCQlzZXNzaW9uX3JlZ2lzdGVyKCRtZW1icmVfaWQpOw0KCSAgICAgICAgICAgICAgICAgICAgJHdoYXQ9J21lbWJyZSc7DQoJCQkJCQkkc21hcnR5LT5hc3NpZ24oImRldGFpbCIsdHJ1ZSk7DQoJCQkJCQkkYWZmPSRzbWFydHktPmZldGNoKCcuL19fYWRtaW5fXy9zaXRlX19fYWRtaW5fX3ByZXNlbnRhdGlvbi4nLlRQTF9FWFQpOw0KCQkJCQkJZGllKCRhZmYpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJZWxzZXsNCgkJCQkJCSR3aGF0PSdtZW1icmUnOw0KCQkJCQkJJF9QT1NUWydtZW1icmVfaWQnXT0kX1NFU1NJT05bJ3VzZXJfaWQnXTsNCgkJCQkJfQ0KICAgICAgICAgICAgICAgICAgICANCgkJCQljYXNlICdtZW1icmUnOg0KCQkJCQkkaWQ9JF9QT1NUWydtZW1icmVfaWQnXTsNCgkJCQkJJG1lbWJyZV9pZD0kaWQ7DQoJCQkJCSRfU0VTU0lPTlsnbWVtYnJlX2lkJ109JGlkOw0KCQkJCQkNCgkJCQkJJHNtYXJ0eS0+YXNzaWduKCR3aGF0LCRkYi0+c2VsZWN0Rmlyc3QoJ1NlbGVjdCAqIGZyb20gdF9tZW1icmVzIHdoZXJlIG1lbWJyZV9pZD0nLiRpZCkpOw0KCQkJCQkNCgkJCQkJc2Vzc2lvbl9yZWdpc3RlcigkbWVtYnJlX2lkKTsNCgkJCQkJYnJlYWs7DQoNCgkJCQljYXNlICdlcXVpcGUnOg0KCQkJCQkkaWQ9JF9QT1NUWydlcXVpcGVfaWQnXTsJCQkJCQ0KCQkJCQkkbWVtYnJlX2lkPSRpZDsNCgkJCQkJJF9TRVNTSU9OWydlcXVpcGVfaWQnXT0kaWQ7DQoJCQkJCWJyZWFrOyANCg0KCQkJCWNhc2UgJ2NvbXBvc2l0aW9uJzoNCgkJCQkJJGlkPSRfUE9TVFsnbWF0Y2hfaWQnXTsJCQkJCQ0KCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RldGFpbF9jb21wb19hZG1pbicsJGlkKTsNCgkJCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCQkJYnJlYWs7DQoJCQkJCSANCgkJCQljYXNlICdldG9pbGUnOg0KCQkJCQkkaWQ9JF9QT1NUWydtYXRjaF9pZCddOwkJCQkJDQoJCQkJCSRzbWFydHktPmFzc2lnbignZGV0YWlsX2V0b2lsZV9hZG1pbicsJGlkKTsNCgkJCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCQkJYnJlYWs7DQoNCgkJCQljYXNlICdzdGFmZic6DQoJCQkJCSRpZD0kX1BPU1RbJ21hdGNoX2lkJ107CQkJCQkNCgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdkZXRhaWxfc3RhZmZfYWRtaW4nLCRpZCk7DQoJCQkJCSRzbWFydHktPmRpc3BsYXkoJy4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fcHJlc2VudGF0aW9uLicuVFBMX0VYVCk7DQoJCQkJCWJyZWFrOw0KCQkJIA0KCQkJCWNhc2UgJ21hdGNoRGV0YWlsJzoNCgkJCQkJJGlkPSRfUE9TVFsnbWF0Y2hfaWQnXTsJCQ0KCQkJCQkkc3FsPSdzZWxlY3QgKiBmcm9tIHRfZXF1aXBlcyBpbm5lciBqb2luIHRfbWF0Y2hzIG9uIGVxdWlwZV9pZD1tYXRjaF9lcXVpcGVfQSBvciBlcXVpcGVfaWQ9bWF0Y2hfZXF1aXBlX0Igd2hlcmUgbWF0Y2hfaWQ9Jy4kaWQ7DQoJCQkJCSRzbWFydHktPmFzc2lnbignZGV0YWlsX21hdGNoJywkZGItPlNlbGVjdEFsbEJ5KCRzcWwsJ2VxdWlwZV9pZCcpKTsNCgkJCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCQkJYnJlYWs7DQoJCQkJCQ0KCQkJCWRlZmF1bHQ6DQoJCQkJCWVjaG8gIk1vdCBjbMOpICIuJF9SRVFVRVNUWyd3aGF0J10uIiBub24gcsOpZsOpcmVuY8OpIjsNCgkJCX0NCg0KCQkJJHNtYXJ0eS0+YXNzaWduKCJkZXRhaWwiLHRydWUpOw0KCQkJJHNtYXJ0eS0+ZGlzcGxheSgnLi9fX2FkbWluX18vc2l0ZV9fX2FkbWluX19wcmVzZW50YXRpb24uJy5UUExfRVhUKTsNCgkJCSRzbWFydHktPmRpc3BsYXkoIi4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fJHdoYXQuIi5UUExfRVhUKTsNCgkJDQoJCQlicmVhazsNCg0KCQljYXNlICdwb3N0JzoNCgkJDQoJCQlzd2l0Y2goJF9SRVFVRVNUWyd3aGF0J10pew0KDQoJCQkgICAgY2FzZSAnc3ViLXVwZGF0ZSc6DQoJCQkgICAgICAgIA0KCQkJICAgICAgICBzd2l0Y2goJF9QT1NUWyd3aWNoJ10pew0KCQkJCQkJY2FzZSAncGFyYW1fZHluJzoNCg0KCQkJCQkJCWZvcmVhY2goJF9QT1NUWydjdXJyJ10gYXMgJGlkPT4kdmFsKXsNCgkJCQkJCQkJaWYoaXNzZXQoJHZhbFsnc2VsZWN0ZWQnXSkpew0KCQkJCQkJCQkJJHNxbC49J0RFTEVURSBmcm9tIHRfZHluX2ltYWdlcyB3aGVyZSBpbWFnZV9pZD0nLiRpZDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCg0KLyoJCQkJCQkJJG5ldz0kZGItPmV4dHJhY3RGaWVsZHMoJF9QT1NULCduZXcnKTsNCg0KCQkJCQkJCWZvcmVhY2goJG5ldyBhcyAka2V5PT4kdmFsKXsNCgkJCQkJCQkJaWYoJHZhbFsncGFyYW1fbmFtZSddIT0nJyAmJiAkdmFsWydwYXJhbV92YWx1ZSddIT0nJykNCgkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X3BhcmFtcyAocGFyYW1fbmFtZSxwYXJhbV92YWx1ZSxwYXJhbV9saWIscGFyYW1fdHlwKSB2YWx1ZXMoIicuJHZhbFsncGFyYW1fbmFtZSddLiciLCInLiR2YWxbJ3BhcmFtX3ZhbHVlJ10uJyIsIicuJHZhbFsncGFyYW1fbGliJ10uJyIsIicuJHZhbFsncGFyYW1fdHlwJ10uJyIpOyc7DQoJCQkJCQkJfQ0KCSovCQkJDQoJCQkJCQkJDQoJCQkJCQkvLwkkZGItPlNlbGVjdCgkc3FsKTsNCg0KCQkJCQkJICAgIGJyZWFrOw0KCQkJCQkJY2FzZSAncGFyYW0nOg0KCQkJCQkJCSRzcWw9J1RSVU5DQVRFIFRBQkxFIHRfcGFyYW1zOyc7DQoJCQkJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydjdXJyJ10pKQ0KCQkJCQkJCQlmb3JlYWNoKCRfUE9TVFsnY3VyciddIGFzICR2YWwpew0KCQkJCQkJCQkJaWYoIWlzc2V0KCR2YWxbJ3NlbGVjdGVkJ10pKQ0KCQkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X3BhcmFtcyAocGFyYW1fbmFtZSxwYXJhbV92YWx1ZSxwYXJhbV9saWIscGFyYW1fdHlwKSB2YWx1ZXMoIicuJHZhbFsncGFyYW1fbmFtZSddLiciLCInLiR2YWxbJ3BhcmFtX3ZhbHVlJ10uJyIsIicuJHZhbFsncGFyYW1fbGliJ10uJyIsIicuJHZhbFsncGFyYW1fdHlwJ10uJyIpOyc7DQoJCQkJCQkJCX0NCg0KCQkJCQkJCSRuZXc9JGRiLT5leHRyYWN0RmllbGRzKCRfUE9TVCwnbmV3Jyk7DQoNCgkJCQkJCQlmb3JlYWNoKCRuZXcgYXMgJGtleT0+JHZhbCl7DQoJCQkJCQkJCWlmKCR2YWxbJ3BhcmFtX25hbWUnXSE9JycgJiYgJHZhbFsncGFyYW1fdmFsdWUnXSE9JycpDQoJCQkJCQkJCQkkc3FsLj0nSU5TRVJUIElOVE8gdF9wYXJhbXMgKHBhcmFtX25hbWUscGFyYW1fdmFsdWUscGFyYW1fbGliLHBhcmFtX3R5cCkgdmFsdWVzKCInLiR2YWxbJ3BhcmFtX25hbWUnXS4nIiwiJy4kdmFsWydwYXJhbV92YWx1ZSddLiciLCInLiR2YWxbJ3BhcmFtX2xpYiddLiciLCInLiR2YWxbJ3BhcmFtX3R5cCddLiciKTsnOw0KCQkJCQkJCX0NCg0KCQkJCQkJCSRkYi0+U2VsZWN0KCRzcWwpOw0KCQkJCQkJCWJyZWFrOw0KDQoJCQkgICAgICAgICAgICBjYXNlICdlcXVpcGVfbm91dmVhdSc6DQoJCQkgICAgICAgICAgICANCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnbWVtYnJlX25vbSddIGFzICRrZXk9PiRub20pew0KCQkJICAgICAgICAgICAgICAgICAgICAkaXRlbT0kX1BPU1RbJ2l0ZW0nXVsnYWRkJ107DQoJCQkgICAgICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgICAgICAkcHJlbm9tID0gJGl0ZW1bJ21lbWJyZV9wcmVub20nXVska2V5XTsNCgkJCSAgICAgICAgICAgICAgICAgICAgJG1haWwgPSAkaXRlbVsnbWVtYnJlX21haWwnXVska2V5XTsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICRpdGVtWydtZW1icmVfcGFzc3dvcmQnXVska2V5XTsNCgkJCSAgICAgICAgICAgICAgICAgICAgDQoJCQkgICAgICAgICAgICAgICAgICAgICRzcWw9J0lOU0VSVCBJTlRPIHRfbWVtYnJlcyAobWVtYnJlX25vbSxtZW1icmVfcHJlbm9tLG1lbWJyZV9lbWFpbCxtZW1icmVfbWQ1LG1lbWJyZV9sb2dpbiknOw0KCQkJICAgICAgICAgICAgICAgICAgICAkc3FsLj0nIHZhbHVlcygiJy4kbm9tLiciLCInLiRwcmVub20uJyIsIicuJG1haWwuJyInOw0KCQkJCQkJCQkkc3FsLj0nLG1kNSgiJy5HUkFJTl9ERV9TQUJMRS4kcHdkLkdSQUlOX0RFX1NBQkxFLiciKSwiJy4oJG5vbS4nXycuJHByZW5vbSkuJyIpOyc7DQoNCgkJCQkJCQkJJGRiLT5JbnNlcnQoJHNxbCk7DQoJCQkJCQkJCQ0KCQkJCQkJCQkkaWQgPSAkZGItPmxhc3RJZDsNCgkJCQkJCQkJDQoJCQkJCQkJCWlmKCRpZCl7DQoJCQkJCQkJCSAgICAkc2Fpc29uX2lkPSRzYWlzb25fY291cmFudGVbJ3NhaXNvbl9pZCddOw0KCQkJCQkJCQkgICAgJGVxdWlwZV9pZDsNCgkJCQkJCQkJICAgICRzcWw9J0lOU0VSVCBJTlRPIHRfbGllbnNfamVzIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgJzsNCgkJCQkJCQkJICAgICRzcWwuPSdWQUxVRVMoIicuJHNhaXNvbl9pZC4nIiwiJy4kX1NFU1NJT05bJ2VxdWlwZV9pZCddLiciLCInLiRpZC4nIik7JzsNCgkJCQkJCQkJICAgIA0KCQkJCQkJCQkgICAgJGRiLT5JbnNlcnQoJHNxbCk7DQoNCgkJCQkJCQkJCWlmKCFlbXB0eSgkbWFpbCkpew0KCQkJCQkJCQkJICAgIGVudm95ZXJNYWlsKCRtYWlsLCRkYi0+U2VsZWN0Rmlyc3QoInNlbGVjdCAqIGZyb20gdF9tZW1icmVzIHdoZXJlIG1lbWJyZV9pZD0kaWQiKSk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBicmVhazsNCgkJCSAgICAgICAgDQoJCQkgICAgICAgICAgICBjYXNlICdqb3V0ZXVyX2xvZ2luJzoNCgkJCSAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgIGlmKGVtcHR5KCRfUE9TVFsncF9sb2dpbiddKSB8fCBlbXB0eSgkX1BPU1RbJ3BfcHdkJ10pKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHdhcm5Mdmw9MzsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd3YXJuTHZsJywkd2Fybkx2bCk7DQoJCQkgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KCQkJCQkJCX0NCg0KCQkJICAgICAgICAgICAgICAgICRzcWw9J1NlbGVjdCBjb3VudCgqKSBhcyBDTlQsbWVtYnJlX2lkIGZyb20gdF9tZW1icmVzIHdoZXJlIG1lbWJyZV9sb2dpbj0iJy4kX1BPU1RbJ3BfbG9naW4nXS4nIiBhbmQgbWVtYnJlX21kNT1tZDUoIicuR1JBSU5fREVfU0FCTEUuJF9QT1NUWydwX3B3ZCddLkdSQUlOX0RFX1NBQkxFLiciKSBncm91cCBieSBtZW1icmVfaWQnOw0KCQkJICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgICRyb3c9JGRiLT5TZWxlY3RGaXJzdCgkc3FsKTsNCgkJCSAgICAgICAgICAgICAgICAkbG9nX3Jlc3VsdD0kcm93WydDTlQnXTsNCgkJCSAgICAgICAgICAgICAgICANCgkJCSAgICAgICAgICAgICAgICAkd2Fybkx2bD0xOw0KCQkJICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgIGlmKCRsb2dfcmVzdWx0PT0wKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydtZW1icmVfbG9naW5fdHJ5J10rKzsNCgkJCSAgICAgICAgICAgICAgICAgICAgJHdhcm5Mdmw9MjsNCgkJCSAgICAgICAgICAgICAgICAgICAgDQoJCQkgICAgICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnbWVtYnJlX2Nvbm5lY3RlZCddKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZXsNCgkJCQkJCQkgICAgJF9TRVNTSU9OWydtZW1icmVfY29ubmVjdGVkJ109JHJvd1snbWVtYnJlX2lkJ107DQoJCQkJCQkJICAgICRzbWFydHktPmFzc2lnbignbWVtYnJlX2Nvbm5lY3RlZCcsJHJvd1snbWVtYnJlX2lkJ10pOw0KCQkJCQkJCX0NCg0KCQkJCQkJCWlmKCRfU0VTU0lPTlsnbWVtYnJlX2xvZ2luX3RyeSddPj0zKQ0KCQkJCQkJCSAgICAkd2Fybkx2bD0xMDsNCg0KCQkJCQkJCSRzbWFydHktPmFzc2lnbignd2Fybkx2bCcsJHdhcm5MdmwpOw0KCQkJICAgICAgICAgICAgICAgIA0KCQkJICAgICAgICAgICAgICAgIGJyZWFrOw0KCQkJICAgICAgICAgICAgY2FzZSAncGxheWVyX2Fzc28nOg0KCQkJICAgCQkJCSRzcWw9Jyc7DQoJCQkgICAJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydmb25jdGlvbiddWydleGlzdCddKSkNCgkJCQkgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2ZvbmN0aW9uJ11bJ2V4aXN0J10gYXMgJGZvbmN0aW9uX2lkPT4kZm9uY3Rpb24pew0KCQkJCQkJCQkJaWYoaXNzZXQoJGZvbmN0aW9uWydjaGVja2VkJ10pKXsNCgkJCQkJCQkJCSAgICAkc3FsLj0nREVMRVRFIEZST00gdF9saWVuc19tZnMgd2hlcmUgbWZzX2xpZW5faWQ9Jy4kZm9uY3Rpb25faWQuJyBMSU1JVCAxOyc7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCg0KCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydmb25jdGlvbiddWydhZGQnXVsnZm9uY3Rpb25faWQnXSBhcyAkaT0+JGZvbmN0aW9uKXsNCgkJICAgICAgICAgICAgICAgICAgICAJJHNhaXNvbl9pZD0kX1BPU1RbJ2ZvbmN0aW9uJ11bJ2FkZCddWydzYWlzb25faWQnXVskaV07DQoNCgkJCSAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoJGZvbmN0aW9uKSAmJiAkZm9uY3Rpb24hPTAgJiYgJHNhaXNvbl9pZCE9MCl7DQoJCQkgICAgICAgICAgICAgICAgICAgIAkkdGFiPWV4cGxvZGUoJy0nLCRmb25jdGlvbik7DQoJCQkJCQkJCQkkc3FsLj0nSU5TRVJUIElOVE8gdF9saWVuc19tZnMgKGZvbmN0aW9uX2lkLGZvbmN0aW9uX3R5cGVfaWQsc2Fpc29uX2lkLG1lbWJyZV9pZCkgdmFsdWVzKCcuJHRhYlswXS4nLCcuJHRhYlsxXS4nLCcuJHNhaXNvbl9pZC4nLCcuJF9TRVNTSU9OWydtZW1icmVfaWQnXS4nKTsnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJCSRkYi0+VXBkYXRlKCRzcWwpOw0KDQoJCQkgICAgICAgICAgICAJYnJlYWs7DQoNCgkJCSAgICAgICAgICAgIGNhc2UgJ3BsYXllcl9lcXVpcGVfbGlzdCc6DQoJCQkgICAJCQkJJHNxbD0nJzsNCgkJCSAgIAkJCQlpZihpc19hcnJheSgkX1BPU1RbJ3NhaXNvbiddWydleGlzdCddKSkNCgkJCQkgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3NhaXNvbiddWydleGlzdCddIGFzICRzYWlzb25faWQ9PiRzYWlzb24pew0KCQkJCQkJCQkJaWYoJHNhaXNvblsnY2hlY2tlZCddPT0xKXsNCgkJCQkJCQkJCSAgICAkc3FsLj0nREVMRVRFIEZST00gdF9saWVuc19qZXMgd2hlcmUgamVzX2xpZW5faWQ9Jy4kc2Fpc29uWydqZXMnXS4nIExJTUlUIDE7JzsNCgkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJJHNxbC49J1VQREFURSB0X2xpZW5zX2plcyBTRVQgZXF1aXBlX2lkPScuJHNhaXNvblsnZXF1aXBlX2lkJ10uJyB3aGVyZSBqZXNfbGllbl9pZD0nLiRzYWlzb25bJ2plcyddLicgTElNSVQgMTsnOw0KCQkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnc2Fpc29uJ11bJ2FkZCddWydzYWlzb25faWQnXSBhcyAkc2Fpc29uKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoJHNhaXNvbikgJiYgJHNhaXNvbiE9MCl7DQoJCQkgICAgICAgICAgICAgICAgICAgIAkkdGFiPWV4cGxvZGUoJy0nLCRzYWlzb24pOw0KCQkJCQkJCQkJJHNxbC49J0lOU0VSVCBJTlRPIHRfbGllbnNfamVzIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgdmFsdWVzKCcuJHRhYlswXS4nLCcuJHRhYlsxXS4nLCcuJF9TRVNTSU9OWydtZW1icmVfaWQnXS4nKTsnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCSAgICAgICAgICAgIAlicmVhazsNCg0KCQkJICAgICAgICAgICAgY2FzZSAncGxheWVyX2NvYWNoX2xpc3QnOg0KCQkJICAgCQkJCSRzcWw9Jyc7DQoJCQkgICAJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydzYWlzb24nXVsnZXhpc3QnXSkpDQoJCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydzYWlzb24nXVsnZXhpc3QnXSBhcyAkc2Fpc29uX2lkPT4kc2Fpc29uKXsNCgkJCQkJCQkJCWlmKCRzYWlzb25bJ2NoZWNrZWQnXT09MSl7DQoJCQkJCQkJCQkgICAgJHNxbC49J0RFTEVURSBGUk9NIHRfbGllbnNfZWMgd2hlcmUgZWNfbGllbl9pZD0nLiRzYWlzb25bJ2VjJ10uJyBMSU1JVCAxOyc7DQoJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCSRzcWwuPSdVUERBVEUgdF9saWVuc19lYyBTRVQgZXF1aXBlX2lkPScuJHNhaXNvblsnZXF1aXBlX2lkJ10uJyB3aGVyZSBlY19saWVuX2lkPScuJHNhaXNvblsnamVzJ10uJyBMSU1JVCAxOyc7DQoJCQkJCQkJCX0NCg0KCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydzYWlzb24nXVsnYWRkJ11bJ3NhaXNvbl9pZCddIGFzICRzYWlzb24pew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc2Fpc29uKSAmJiAkc2Fpc29uIT0wKXsNCgkJCSAgICAgICAgICAgICAgICAgICAgCSR0YWI9ZXhwbG9kZSgnLScsJHNhaXNvbik7DQoJCQkJCQkJCQkkc3FsLj0nSU5TRVJUIElOVE8gdF9saWVuc19lYyAoc2Fpc29uX2lkLGVxdWlwZV9pZCxtZW1icmVfaWQpIHZhbHVlcygnLiR0YWJbMF0uJywnLiR0YWJbMV0uJywnLiRfU0VTU0lPTlsnbWVtYnJlX2lkJ10uJyk7JzsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCg0KCQkJCQkJCQ0KCQkJCQkJCSRkYi0+VXBkYXRlKCRzcWwpOw0KDQoJCQkgICAgICAgICAgICAJYnJlYWs7DQoNCgkJCSAgICAgICAgICAgIGNhc2UgJ3BsYXllcl9pbmZvJzoNCgkJCQkJCQkNCgkJCQkJCQlpZighZW1wdHkoJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3B3ZCddKSl7DQoJCQkJCQkJLy9PbiB2YWxpZGUgbGEgZmljaGUgZHUgbWVtYnJlIG9uIGRvaXQgZW52b3llciB1biBtYWlsDQoJCQkJCQkJCSRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9tZDUnXT1tZDUoR1JBSU5fREVfU0FCTEUuJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3B3ZCddLkdSQUlOX0RFX1NBQkxFKTsNCgkJCQkJCQkJJHNlbmRfbWFpbD10cnVlOw0KCQkJCQkJCX0NCgkJCQkJCQlpZigkX1BPU1RbJ21lbWJyZSddWydtZW1icmVfcHJvZl9ob21tZSddPT0wKQ0KCQkJCQkJCQkkX1BPU1RbJ21lbWJyZSddWydtZW1icmVfcHJvZl9ob21tZSddPSRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9wcm9mX2hvbW1lX3R4dCddOw0KDQoJCQkJCQkJaWYoJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3Byb2ZfZmVtbWUnXT09MCkNCgkJCQkJCQkJJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX3Byb2ZfZmVtbWUnXT0kX1BPU1RbJ21lbWJyZSddWydtZW1icmVfcHJvZl9mZW1tZV90eHQnXTsNCg0KCQkJCQkJCSRfUE9TVFsnbWVtYnJlJ109YWRkc2xhc2hlc19zcWwoJF9QT1NUWydtZW1icmUnXSk7DQoNCgkJCQkJCQkkc3FsPSRkYi0+VXBkYXRlU1FMKCd0X21lbWJyZXMnLCRfUE9TVFsnbWVtYnJlJ10sJ21lbWJyZV9pZD0nLiRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9pZCddKTsNCgkJCQkJCQkkZGItPlVwZGF0ZSgkc3FsKTsNCg0KCQkJCQkJCWlmKCRkYi0+Q291bnQ9PS0xKXsNCgkJCQkJCQkJYWxlcnRBamF4KCdFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIsIHJlw6lzc2F5ZXogcGx1cyB0YXJkJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2V7DQoJCSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRzZW5kX21haWw9PXRydWUgJiYgaXNzZXQoJF9QT1NUWydtZW1icmUnXVsnbWVtYnJlX2VtYWlsJ10pKXsNCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95ZXJNYWlsKCRfUE9TVFsnbWVtYnJlJ11bJ21lbWJyZV9lbWFpbCddLCRfUE9TVFsnbWVtYnJlJ10pOw0KCQkgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCgkJDQoJCQ0KCQkJCQkJCQlpZihpc3NldCgkX1BPU1RbJ3NlbGYnXSkpDQoJCQkJCQkJCWVjaG8gIndpbmRvdy5sb2NhdGlvbi5ocmVmPSciLlNJVEVfVVJMLiInOyI7DQoJCQkJCQkJfQ0KDQoJCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdlcXVpcGVfaW5mbyc6DQoJCQkJCQkJJGVxdWlwZVNxbD1hZGRzbGFzaGVzX3NxbCgkX1BPU1RbJ2VxdWlwZSddKTsNCg0KCQkJCQkJCSRzcWw9JGRiLT5VcGRhdGVTUUwoJ3RfZXF1aXBlcycsJGVxdWlwZVNxbCwnZXF1aXBlX2lkPScuJGVxdWlwZVNxbFsnZXF1aXBlX2lkJ10pOw0KDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCQljYXNlICdlcXVpcGVfc2Fpc29uX2xpc3QnOg0KCQkJCQkJICAgICRFX0lEPSRfU0VTU0lPTlsnZXF1aXBlX2lkJ107DQoJCQkgICAJCQkJJHNxbD0nJzsNCgkJCSAgIAkJCQlpZihpc19hcnJheSgkX1BPU1RbJ2l0ZW0nXVsnZXhpc3QnXSkpDQoJCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydpdGVtJ11bJ2V4aXN0J10gYXMgJHNhaXNvbl9pZD0+JHNhaXNvbil7DQoJCQkJCQkJCQlpZigkc2Fpc29uWydjaGVja2VkJ109PTEpew0KCQkJCQkJCQkJICAgICRzcWwuPSdERUxFVEUgRlJPTSB0X2xpZW5zX2VzIHdoZXJlIGVzX2xpZW5faWQ9Jy4kc2Fpc29uWydlcyddLicgTElNSVQgMTsnOw0KCQkJCQkJCQkJICAgICRzcWwuPSdERUxFVEUgRlJPTSB0X2xpZW5zX2plcyB3aGVyZSBzYWlzb25faWQ9Jy4kc2Fpc29uX2lkLicgYW5kIGVxdWlwZV9pZD0nLiRFX0lELic7JzsNCgkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJJHNxbC49J1VQREFURSB0X2xpZW5zX2VzIFNFVCBzYWlzb25fdHlwZT0iJy4kc2Fpc29uWydzYWlzb25fdHlwZSddLiciIHdoZXJlIGVzX2xpZW5faWQ9Jy4kc2Fpc29uWydlcyddLicgTElNSVQgMTsnOw0KCQkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnc2Fpc29uX2lkJ10gYXMgJGtleT0+JHNfaWQpew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc19pZCkgJiYgJHNfaWQhPTApew0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGU9JF9QT1NUWydpdGVtJ11bJ2FkZCddWydzYWlzb25fdHlwZSddWyRrZXldOw0KCQkJCQkJCQkJJHNxbC49J0lOU0VSVCBJTlRPIHRfbGllbnNfZXMgKHNhaXNvbl9pZCxlcXVpcGVfaWQsc2Fpc29uX3R5cGUpIHZhbHVlcygnLiRzX2lkLicsJy4kRV9JRC4nLCInLiR0eXBlLiciKTsnOw0KCQkJCQkJCQkJJHNxbC49J0lOU0VSVCBJTlRPIHRfbGllbnNfamVzIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgU2VsZWN0ICcuJHNfaWQuJywnLiRFX0lELicsIG1lbWJyZV9pZCBmcm9tIHRfbGllbnNfamVzIHdoZXJlIHNhaXNvbl9pZD0nLigkc19pZC0xKS4nIGFuZCBlcXVpcGVfaWQ9Jy4kRV9JRC4nOyc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCSAgICAgICAgICAgIAlicmVhazsNCg0KCQkJCQkJY2FzZSAnZXF1aXBlX2NvYWNoX2xpc3QnOg0KCQkJICAgCQkJCSRzcWw9Jyc7DQoJCQkgICAJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydpdGVtJ11bJ2V4aXN0J10pKQ0KCQkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydleGlzdCddIGFzICRsX2lkPT4kc2Fpc29uKXsNCgkJCQkJCQkJCWlmKCRzYWlzb25bJ2NoZWNrZWQnXT09MSl7DQoJCQkJCQkJCQkgICAgJHNxbC49J0RFTEVURSBGUk9NIHRfbGllbnNfZWMgd2hlcmUgZWNfbGllbl9pZD0nLiRsX2lkLicgTElNSVQgMTsnOw0KCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQkkc3FsLj0nVVBEQVRFIHRfbGllbnNfZWMgU0VUIG1lbWJyZV9pZD0nLiRzYWlzb25bJ21lbWJyZV9pZCddLicgd2hlcmUgZWNfbGllbl9pZD0nLiRsX2lkLicgTElNSVQgMTsnOw0KCQkJCQkJCQl9DQoNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnc2Fpc29uX2lkJ10gYXMgJGtleT0+JHNfaWQpew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc19pZCkgJiYgJHNfaWQhPTApew0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJG1faWQ9JF9QT1NUWydpdGVtJ11bJ2FkZCddWydtZW1icmVfaWQnXVska2V5XTsNCgkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X2xpZW5zX2VjIChzYWlzb25faWQsZXF1aXBlX2lkLG1lbWJyZV9pZCkgdmFsdWVzKCcuJHNfaWQuJywnLiRfU0VTU0lPTlsnZXF1aXBlX2lkJ10uJywnLiRtX2lkLicpOyc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoNCgkJCQkJCQkkZGItPlVwZGF0ZSgkc3FsKTsNCg0KCQkJICAgICAgICAgICAgCWJyZWFrOw0KDQoJCQkJCQljYXNlICdlcXVpcGVfam91dGV1cl9saXN0JzoNCgkJCSAgIAkJCQkkc3FsPScnOw0KCQkJICAgCQkJCWlmKGlzX2FycmF5KCRfUE9TVFsnaXRlbSddWydleGlzdCddKSkNCgkJCQkgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2l0ZW0nXVsnZXhpc3QnXSBhcyAkbF9pZD0+JHNhaXNvbil7DQoJCQkJCQkJCQlpZigkc2Fpc29uWydjaGVja2VkJ109PTEpew0KCQkJCQkJCQkJICAgICRzcWwuPSdERUxFVEUgRlJPTSB0X2xpZW5zX2plcyB3aGVyZSBqZXNfbGllbl9pZD0nLiRsX2lkLicgTElNSVQgMTsnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJDQoJCQkJCQkJCX0NCg0KCQkJCQkJCSRzcWwuPSdVcGRhdGUgdF9saWVuc19qZXMgc2V0IHJlc3BvbnNhYmxlPTAgd2hlcmUgZXF1aXBlX2lkPScuJF9TRVNTSU9OWydlcXVpcGVfaWQnXS4nOyc7DQoNCgkJCQkJCQlpZihpc19hcnJheSgkX1BPU1RbJ2l0ZW0nXVsnZXhpc3QnXVsncmVzcG9uc2FibGUnXSkpDQoJCQkJICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydpdGVtJ11bJ2V4aXN0J11bJ3Jlc3BvbnNhYmxlJ10gYXMgJG1faWQ9PiR0YWIpew0KCQkJCSAgICAgICAgICAgICAgICAgICAgJHRhYj1leHBsb2RlKCctJywkdGFiKTsNCgkJCQkJCQkJICAgICRzcWwuPSJVcGRhdGUgdF9saWVuc19qZXMgc2V0IHJlc3BvbnNhYmxlPTEgd2hlcmUgc2Fpc29uX2lkPSR0YWJbMF0gYW5kIG1lbWJyZV9pZD0kdGFiWzFdOyI7DQoJCQkJCQkJCX0NCg0KCQkJCQkJCQkNCgkJCSAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnaXRlbSddWydhZGQnXVsnc2Fpc29uX2lkJ10gYXMgJGtleT0+JHNfaWQpew0KCQkJICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkc19pZCkgJiYgJHNfaWQhPTApew0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJG1faWQ9JF9QT1NUWydpdGVtJ11bJ2FkZCddWydtZW1icmVfaWQnXVska2V5XTsNCgkJCQkJCQkJCSRzcWwuPSdJTlNFUlQgSU5UTyB0X2xpZW5zX2plcyAoc2Fpc29uX2lkLGVxdWlwZV9pZCxtZW1icmVfaWQpIHZhbHVlcygnLiRzX2lkLicsJy4kX1NFU1NJT05bJ2VxdWlwZV9pZCddLicsJy4kbV9pZC4nKTsnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KDQoJCQkJCQkJJGRiLT5VcGRhdGUoJHNxbCk7DQoNCgkJCSAgICAgICAgICAgIAlicmVhazsNCg0KCQkJICAgICAgICB9DQoJCQkJCSRzbWFydHktPmFzc2lnbigncHJlc2VudGF0aW9uRHluYW1pcXVlJywkX1BPU1RbJ3dpY2gnXSk7DQoJCQkJCSRzbWFydHktPmRpc3BsYXkoJy4vX19hZG1pbl9fL3NpdGVfX19hZG1pbl9fcHJlc2VudGF0aW9uLicuVFBMX0VYVCk7DQoNCgkJCSAgICAgICAgYnJlYWs7DQoJCQkJY2FzZSAnZXF1aXBlJzoNCgkJCQkJDQoJCQkJYnJlYWs7IA0KCQkJCQ0KCQkJCWNhc2UgJ2NvbXBvc2l0aW9uJzoNCgkJCQkJDQoJCQkJCSRtaWQ9JF9QT1NUWydjb21wbyddWydtYXRjaF9pZCddOyANCgkJCQkJJF9QT1NUWydjb21wbyddPWFkZHNsYXNoZXNfc3FsKCRfUE9TVFsnY29tcG8nXSk7DQoJCQkJCQ0KCQkJCQkkc3FsPSJERUxFVEUgRlJPTSB0X2NvbXBvcyB3aGVyZSBjb21wb19tYXRjaF9pZD0iLiRtaWQuIjsiOw0KCQkJCQkNCgkJCQkJDQoJCQkJCWZvcmVhY2goc3BsaXQoJywnLCRfUE9TVFsnY29tcG9fQSddKSBhcyAkdmFsKXsNCgkJCQkJCWlmKCR2YWwpDQoJCQkJCQkJJHNxbC49IklOU0VSVCBJTlRPIHRfY29tcG9zIFZBTFVFUygnJywnIi4kbWlkLiInLCciLiR2YWwuIicpOyI7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaChzcGxpdCgnLCcsJF9QT1NUWydjb21wb19CJ10pIGFzICR2YWwpew0KCQkJCQkJaWYoJHZhbCkNCgkJCQkJCQkkc3FsLj0iSU5TRVJUIElOVE8gdF9jb21wb3MgVkFMVUVTKCcnLCciLiRtaWQuIicsJyIuJHZhbC4iJyk7IjsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJGRiLT5JbnNlcnQoJHNxbCk7DQoJCQkJCQ0KCQkJCQlpZigkZGItPkNvdW50PT0tMSl7DQoJCQkJCQlhbGVydEFqYXgoJ0VycmV1ciBsb3JzIGRlIGxhIG1pc2Ugw6Agam91ciwgcmXDqXNzYXlleiBwbHVzIHRhcmQnKTsNCgkJCQkJfQ0KCQkJCQllbHNlew0KCQkJCQkJJHNxbD0ic2VsZWN0IGNvdW50KCopIGZyb20gdF9jb21wb3Mgd2hlcmUgY29tcG9fbWF0Y2hfaWQ9JG1pZCI7DQoJCQkJCQkkY250PSRkYi0+Q291bnQoJHNxbCk7DQoJCQkJCQllY2hvICINCgkJCQkJCQkvLyBPbiBjYWNoZQ0KCQkJCQkJCSQoJ2V0b2lsZV9idXR0b24kbWlkJykuZGlzYWJsZWQ9KCRjbnQ9PTAgPyB0cnVlOiBmYWxzZSk7DQoJCQkJCQkJRWxlbWVudC50b2dnbGUoJ2ljJyk7DQoJCQkJCQkJLy8gT24gYXZlcnRpcw0KCQkJCQkJCWFsZXJ0KCdNaXNlIMOgIGpvdXIgZWZmZWN0dcOpZSBhdmVjIHN1Y2PDqXMnKTsNCgkJCQkJCQkvLyBPbiBlbMOodmUgbGUgZm9ybXVsYWlyZSANCgkJCQkJCQkkKCdpYycpLmlubmVySFRNTD1cIlwiOw0KCQkJCQkJCSQoJ2V0b2lsZV9idXR0b24kbWlkJykuY2xpY2soJCgnZXRvaWxlX2J1dHRvbiRtaWQnKSk7DQoJCQkJCQkJIjsNCgkJCQkJfQ0KLyogKi8JCQkJDQoJCQkJYnJlYWs7IA0KCQkJCQ0KCQkJCWNhc2UgJ2V0b2lsZSc6DQoNCgkJCQkJJG1pZD0kX1BPU1RbJ21hdGNoX2lkJ107IA0KCQkJCQkkX1BPU1RbJ2V0b2lsZSddPWFkZHNsYXNoZXNfc3FsKCRfUE9TVFsnZXRvaWxlJ10pOw0KCQkJCQkkX1BPU1RbJ3R5cGUnXQkJPXNwbGl0KCcsJywkX1BPU1RbJ3R5cGUnXSk7DQoJCQkJCSRfUE9TVFsnam91dGV1ciddCT1zcGxpdCgnLCcsJF9QT1NUWydqb3V0ZXVyJ10pOw0KCQkJCQkNCgkJCQkJJHNxbD0iREVMRVRFIEZST00gdF9ldG9pbGVzIHdoZXJlIGV0b2lsZV9tYXRjaF9pZD0iLiRtaWQuIjsiOw0KCQkJCQkNCgkJCQkJZm9yZWFjaCgkX1BPU1RbJ3R5cGUnXSBhcyAka2V5PT4kdmFsKXsNCgkJCQkJCQ0KCQkJCQkJaWYoJF9QT1NUWydqb3V0ZXVyJ11bJGtleV0+MCkNCgkJCQkJCQkkc3FsLj0iSU5TRVJUIElOVE8gdF9ldG9pbGVzIFZBTFVFUygnJywkbWlkLCIuJF9QT1NUWydqb3V0ZXVyJ11bJGtleV0uIiwkdmFsKTsiOwkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSRkYi0+SW5zZXJ0KCRzcWwpOw0KCQkJCQlpZigkZGItPkNvdW50PT0tMSl7DQoJCQkJCQlhbGVydEFqYXgoJ0VycmV1ciBsb3JzIGRlIGxhIG1pc2Ugw6Agam91ciwgcmXDqXNzYXlleiBwbHVzIHRhcmQnKTsNCgkJCQkJfQ0KCQkJCQllbHNlew0KCQkJCQkJZWNobyAiDQoJCQkJCQkJLy8gT24gY2FjaGUNCgkJCQkJCQlFbGVtZW50LnRvZ2dsZSgnaWMnKTsNCgkJCQkJCQkvLyBPbiBhdmVydGlzDQoJCQkJCQkJYWxlcnQoJ01pc2Ugw6Agam91ciBlZmZlY3R1w6llIGF2ZWMgc3VjY8OpcycpOw0KCQkJCQkJCS8vIE9uIGVsw6h2ZSBsZSBmb3JtdWxhaXJlIA0KCQkJCQkJCSQoJ2ljJykuaW5uZXJIVE1MPVwiXCI7DQoJCQkJCQkJIjsNCgkJCQkJfQ0KLyogKi8JCQkJDQoJCQkJYnJlYWs7IA0KCQkJCQ0KCQkJCWNhc2UgJ3N0YWZmJzoNCg0KCQkJCQkkbWlkPSRfUE9TVFsnc3RhZmYnXVsnbWF0Y2hfaWQnXTsNCgkJCQkJJGRiLT5VcGRhdGUoJGRiLT5VcGRhdGVTUUwoJ3RfbWF0Y2hzJywkX1BPU1RbJ3N0YWZmJ10sJ21hdGNoX2lkPScuJG1pZCkpOw0KDQoJCQkJCWlmKCRkYi0+Q291bnQ9PS0xKXsNCgkJCQkJCWFsZXJ0QWpheCgnRXJyZXVyIGxvcnMgZGUgbGEgbWlzZSDDoCBqb3VyLCByZcOpc3NheWV6IHBsdXMgdGFyZCcpOw0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQllY2hvICINCgkJCQkJCQkvLyBPbiBjYWNoZQ0KCQkJCQkJCUVsZW1lbnQudG9nZ2xlKCdpYycpOw0KCQkJCQkJCS8vIE9uIGF2ZXJ0aXMNCgkJCQkJCQlhbGVydCgnTWlzZSDDoCBqb3VyIGVmZmVjdHXDqWUgYXZlYyBzdWNjw6lzJyk7DQoJCQkJCQkJLy8gT24gZWzDqHZlIGxlIGZvcm11bGFpcmUgDQoJCQkJCQkJJCgnaWMnKS5pbm5lckhUTUw9XCJcIjsNCgkJCQkJCQkiOw0KCQkJCQl9DQoJCQkJDQoJCQkJYnJlYWs7IA0KCQkJfQ0KCQkJCQkNCgkJCWJyZWFrOw0KCQkNCgkJZGVmYXVsdDoNCgkJCWJvdWdlX2RlX2xhKCcuLycpOw0KCX0NCg0KPz4NCg==]]></response>
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" state="enabled" id="24800003"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="5"><breakpoint type="line" filename="file:///C:/JP/EasyPHP/www/lolita/index.php" lineno="20" state="enabled" hit_count="0" hit_condition="&gt;=" hit_value="0" id="24800003"></breakpoint></response>
      ----
      Disconnect: 127.0.0.1
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="6" status="stopped" reason="ok"></response>
      Send: run -i 7
      ----
      Disconnect: 127.0.0.1

       
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-08

        Ok, some more comment on what I see from the trace:

        Altho the first "request" is mapped ok (file:///c:/jp/easyphp/www/lolita/index.php) all others are not (css/.. ajax...).
        Your mapping looks ok, so mo real clue here.

        The other bad thing I see is that there are TWO concurrent requests. This plugin does not handle more than one requests really good. It doesn't handle them at all. If one session is active and another request will pop in and override the older one, but the older will still live and keep the previous session "active"...

        I'm having a hard time figuring out what could go wrong here...

        For the sake of it, try to change your mapping setting to
        127.0.0.1||c:\|c:\

        Lower case.

        Always these problems with windows q:)

        Another thing you can try is to change your PHP code to use ob_start(); at the begging. This will prevent all output until the script is finished, and thus no secondary request will mess with debugging. Try this one fist, I think we'll get most out of it. If you still have problems, give me the output again so I can see if we are still having two sessions.

        I have multiple debugging session handling planned, just no time to code it yet.

        Get back to me with progress.

        -Zobo

         
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-08

        Thanks. Trying to reproduce. Can you send me your mapping setup again.
        -Z

         
    • same as the other message

      127.0.0.1| |C:\JP\EasyPHP\www\lolita\|C:\JP\EasyPHP\www\lolita\

       
      • Don HO
        Don HO
        2008-02-08

        > 127.0.0.1| |C:\JP\EasyPHP\www\lolita\|C:\JP\EasyPHP\www\lolita\

        Use another example please.
        Next time I'll remove it like the other spams.

        Don

         
    • excuse me mr Npp is it beacause of the use of the name lolita?
      well sorry if my improvisation association acronym is lolita
      i can use another local site but will it help?

       
    • i've set a new "projet" using c:\index.php and just doing phpinfo();
      changed the mapping info
      set a break point

      run the site
      blinks but nothing more!

      here is the raw:

      Accept: 127.0.0.1
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///c:/index.php" language="PHP" protocol_version="1.0" appid="5620" idekey="default"><engine version="2.0.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2007 by Derick Rethans]]></copyright></init>
      Send: feature_set -i 1 -n max_depth -v 3
      Send: feature_set -i 2 -n max_children -v 15
      Send: breakpoint_set -i 3 -t line -f file:///c:/index.php -n 5 -s enabled -h 0 -o >=
      Send: breakpoint_list -i 4
      Send: run -i 5
      ----
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="max_depth" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_children" success="1"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" state="enabled" id="56200001"></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="4"><breakpoint type="line" filename="file:///c:/index.php" lineno="5" state="enabled" hit_count="0" hit_condition="&gt;=" hit_value="0" id="56200001"></breakpoint></response>
      Recv: <?xml version="1.0" encoding="iso-8859-1"?>
      <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="5" status="stopped" reason="ok"></response>
      Send: run -i 6
      ----
      Disconnect: 127.0.0.1

       
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-08

        Damn.. I can't see anything wrong with this...

        Can you give me the output of phpinfo. At least the Xdebug part.
        Check that extended info is on or breakpoints won't work at all:
        xdebug.extended_info=1

        -Zobo

         
    • nop nothing better

      here is the phpinfo() of xdebug

      xdebug
      xdebug support    enabled
      Version     2.0.2

      XDEBUG NOT LOADED AS ZEND EXTENSION

      Supported protocols    Revision
      DBGp - Common DeBuGger Protocol     $Revision: 1.125.2.2 $
      GDB - GNU Debugger protocol     $Revision: 1.87 $
      PHP3 - PHP 3 Debugger protocol     $Revision: 1.22 $

      Directive    Local Value    Master Value
      xdebug.auto_trace    Off    Off
      xdebug.collect_includes    On    On
      xdebug.collect_params    0    0
      xdebug.collect_return    Off    Off
      xdebug.collect_vars    Off    Off
      xdebug.default_enable    On    On
      xdebug.dump.COOKIE    no value    no value
      xdebug.dump.ENV    no value    no value
      xdebug.dump.FILES    no value    no value
      xdebug.dump.GET    no value    no value
      xdebug.dump.POST    no value    no value
      xdebug.dump.REQUEST    no value    no value
      xdebug.dump.SERVER    no value    no value
      xdebug.dump.SESSION    no value    no value
      xdebug.dump_globals    On    On
      xdebug.dump_once    On    On
      xdebug.dump_undefined    Off    Off
      xdebug.extended_info    On    On
      xdebug.idekey    jpsiffert    default
      xdebug.manual_url    http://www.php.net    http://www.php.net
      xdebug.max_nesting_level    100    100
      xdebug.profiler_aggregate    Off    Off
      xdebug.profiler_append    Off    Off
      xdebug.profiler_enable    Off    Off
      xdebug.profiler_enable_trigger    Off    Off
      xdebug.profiler_output_dir    /tmp    /tmp
      xdebug.profiler_output_name    cachegrind.out.%p    cachegrind.out.%p
      xdebug.remote_autostart    Off    Off
      xdebug.remote_enable    On    On
      xdebug.remote_handler    dbgp    dbgp
      xdebug.remote_host    127.0.0.1    127.0.0.1
      xdebug.remote_log    C:\Jp\easyPhp\www\xdebug.log    C:\Jp\easyPhp\www\xdebug.log
      xdebug.remote_mode    req    req
      xdebug.remote_port    9000    9000
      xdebug.show_exception_trace    Off    Off
      xdebug.show_local_vars    On    On
      xdebug.show_mem_delta    Off    Off
      xdebug.trace_format    0    0
      xdebug.trace_options    0    0
      xdebug.trace_output_dir    /tmp    /tmp
      xdebug.trace_output_name    trace.%c    trace.%c
      xdebug.var_display_max_children    128    128
      xdebug.var_display_max_data    512    512
      xdebug.var_display_max_depth    3    3

      here is my php.ini setup :

      zend_extension_ts="C:\JP\EasyPHP\php\extensions\php_xdebug-2.0.2-4.4.6.dll"
      xdebug.remote_enable=1
      xdebug.remote_handler=dbgp
      xdebug.remote_host=127.0.0.1
      xdebug.remote_mode=req
      xdebug.idekey=default
      xdebug.remote_log="C:\Jp\easyPhp\www\xdebug.log"
      xdebug.remote_port=9000
      xdebug.show_exception_trace=0
      xdebug.show_local_vars=9
      xdebug.show_mem_delta=0
      xdebug.trace_format=0
      xdebug.extended_info=1

       
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-09

        Humm... How can I put this...
        Maybe the big capsed warning "XDEBUG NOT LOADED AS ZEND EXTENSION" might give a clue, that Xdebug is NOT loaded as zend extension?

        If it's not loaded as Zend extension, debugpoints won't work...
        Check that you don't have xdebug loaded twice, or soem other bizare problem. Maybe there is something "wrong" with your PHP?

        -Z

         
    • well sorry but i thought that adding
      zend_extension_ts="C:\JP\EasyPHP\php\extensions\php_xdebug-2.0.2-4.4.6.dll"
      was enough for "zend_extension" otherwise i don't know how to do it....

      Sorry for disturbing

       
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-09

        It should be... That's why this is so confusing...
        Ok.. we are definetely having problems with the PHP extension.
        Please paste the whole phpinfo output. If I can't find the problem there, we'll have to take this to the Xdebug support list.

        Re,
        -Zobo

         
      • Damjan Cvetko
        Damjan Cvetko
        2008-02-09

        I installed EasyPHP (2.0b1).
        I did have some problems with setting it up, mostly vista related, but when I figured out how the config work, I had it set up fast.

        Check that you are editing the rigth files (conf_files\php.ini) and check that perhaps xdebug isn't loaded twice.
        Then stop and start EasyPHP and load you phpinfo php file.

        At the top, near the zend engine logo, make sure you have this line:
        "with Xdebug v2.0.2, Copyright (c) 2002-2007, by Derick Rethans"

        Re,
        -Zobo