55d4731a创建于 2023年2月5日历史提交
<html>

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

  <title>Cangjie Code Coverage Report</title>

  <style media="screen" type="text/css">

  body

{

  color: #000000;

  background-color: #FFFFFF;

}



/* Link formats: use maroon w/underlines */

a:link

{

  color: navy;

  text-decoration: underline;

}

a:visited

{

  color: maroon;

  text-decoration: underline;

}

a:active

{

  color: navy;

  text-decoration: underline;

}



/*** TD formats ***/

td

{

  font-family: sans-serif;

}

td.title

{

  text-align: center;

  padding-bottom: 10px;

  font-size: 20pt;

  font-weight: bold;

}



/* TD Header Information */

td.headerName

{

  text-align: right;

  color: black;

  padding-right: 6px;

  font-weight: bold;

  vertical-align: top;

  white-space: nowrap;

}

td.headerValue

{

  text-align: left;

  color: #284FA8;

  font-family: sans-serif;

  font-weight: bold;

  white-space: nowrap;

}



td.headerTableEntry

{

  text-align: right;

  color: black;

  font-weight: bold;

  white-space: nowrap;

  padding-left: 12px;

  padding-right: 4px;

  background-color: LightBlue;

}

td.headerValueLeg

{

  text-align: left;

  color: black;

  font-size: 80%;

  white-space: nowrap;

  padding-top: 2px;

}



/* Color of horizontal ruler */

td.hr

{

  background-color: navy;

  height:3px;

}

/* Footer format */

td.footer

{

  text-align: center;

  padding-top: 3px;

  font-family: sans-serif;

}



/* Coverage Table */



td.coverTableHead

{

  text-align: center;

  color: white;

  background-color: SteelBlue;

  font-family: sans-serif;

  font-size: 120%;

  white-space: nowrap;

  padding-left: 4px;

  padding-right: 4px;

}

td.coverFile

{

  text-align: left;

  padding-left: 10px;

  padding-right: 20px;

  color: black;

  background-color: LightBlue;

  font-family: monospace;

  font-weight: bold;

  font-size: 110%;

}

td.coverBar

{

  padding-left: 10px;

  padding-right: 10px;

  background-color: LightBlue;

}

td.coverBarOutline

{

  background-color: white;

}

td.coverValue

{

  padding-top: 2px;

  text-align: right;

  padding-left: 10px;

  padding-right: 10px;

  font-family: sans-serif;

  white-space: nowrap;

  font-weight: bold;

}



/* Link Details */

a.detail:link

{

  color: #B8D0FF;

  font-size:80%;

}

a.detail:visited

{

  color: #B8D0FF;

  font-size:80%;

}

a.detail:active

{

  color: #FFFFFF;

  font-size:80%;

}



.graphcont{

    color:#000;

    font-weight:700;

    float:left

}



.graph{

    float:left;

    background-color: white;

    position:relative;

    width:280px;

    padding:0

}



.graph .bar{

    display:block;

    position:relative;

    border:black 1px solid;

    text-align:center;

    color:#fff;

    height:10px;

    font-family:Arial,Helvetica,sans-serif;

    font-size:12px;

    line-height:1.9em

}



.graph .bar span{

    position:absolute;

    left:1em

}



td.coveredLine,

span.coveredLine

{

    background-color: LightGreen!important;

}



td.uncoveredLine,

span.uncoveredLine

{

    background-color: LightPink!important;

}



.linebranch, .linecount

{

    border-right: 1px gray solid;

    background-color: lightgray;

}



.linebranchDetails

{

    position: relative;

}

.linebranchSummary

{

    cursor: help;

}

.linebranchContents

{

    font-family: sans-serif;

    font-size: small;

    text-align: left;

    position: absolute;

    width: 15em;

    padding: 1em;

    background: white;

    border: solid gray 1px;

    box-shadow: 5px 5px 10px gray;

    z-index: 1; /* show in front of the table entries */

}



.takenBranch

{

    color: Green!important;

    cursor: help;

}



.notTakenBranch

{

    color: Red!important;

    cursor: help;

}



.src

{

    padding-left: 12px;

}



.srcHeader,

span.takenBranch,

span.notTakenBranch

{

    font-family: monospace;

    font-weight: bold;

}



pre

{

    height : 15px;

    margin-top: 0;

    margin-bottom: 0;

}



.lineno

{

    background-color: #EFE383;

    border-right: 1px solid #BBB15F;

}

  </style>

</head>



<body>



  <table width="100%" border="0" cellspacing="0" cellpadding="0">

    <tr><td class="title">Cangjie Code Coverage Report</td></tr>

    <tr><td class="hr"></td></tr>



    <tr>

      <td width="100%">

        <table cellpadding="1" border="0" width="100%">

          <tr>

            <td class="headerName">File:</td>

            <td class="headerValue">src/HeaderParser.cj</td>

            <td width="5%"></td>

            <td width="15%"></td>

            <td width="10%" class="headerValue" style="text-align:right;">Hit</td>

            <td width="10%" class="headerValue" style="text-align:right;">Total</td>

            <td width="15%" class="headerValue" style="text-align:right;">Coverage</td>

          </tr>

          <tr>

            <td class="headerName">Date:</td>

            <td class="headerValue">2022-05-17 16:02:09</td>

            <td></td>

            <td class="headerName">Lines:</td>

            <td class="headerTableEntry">401</td>

            <td class="headerTableEntry">433</td>

            <td class="headerTableEntry" style="background-color:LightGreen">93.0 %</td>

          </tr>

          <tr>

            <td class="headerName">Legend:</td>

            <td class="headerValueLeg">

              <span style="background-color:LightPink">low: &lt; 75.0 %</span>

              <span style="background-color:Yellow">medium: &gt;= 75.0 %</span>

              <span style="background-color:LightGreen">high: &gt;= 90.0 %</span>

            </td>

            <td></td>

            <td class="headerName">Branches:</td>

            <td class="headerTableEntry">-</td>

            <td class="headerTableEntry">-</td>

            <td class="headerTableEntry" style="background-color:LightGreen">-</td>

          </tr>

        </table>

      </td>

    </tr>



    <tr><td class="hr"></td></tr>

  </table>



  <br>

  <table cellspacing="0" cellpadding="1">

     <tr>

      <td width="5%" align="right" class="srcHeader">Line</td>

      <td width="5%" align="right" class="srcHeader">Branch</td>

      <td width="5%" align="center" class="srcHeader">Hit</td>

      <td width="75%" align="left" class="srcHeader src">Source</td>

    </tr>



    <tr>

<td align="right" class="lineno"><pre>1</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>/*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>2</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>3</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>4</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>5</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>/**</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>6</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> * @file</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>7</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>8</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> * This is a class that provides compressed header information.</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>9</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>10</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>11</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>package zip4cj</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>12</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>from std import math.*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>13</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>from std import io.*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>14</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>from std import log.*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>15</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>from charset import charset.*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>16</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>17</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>/*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>18</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> * Parse zip Header information</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>19</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> * @since0.28.4    @author lizhenjie</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>20</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre> */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>21</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>open class HeaderParser <: ZipSignatures {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>22</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private let HEXADECIMAL = 16</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>23</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private let logger = SimpleLogger()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>24</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private var outPath = ""</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>25</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>26</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public init() {}</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>27</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>    public init(outPath: String) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>28</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>        this.outPath = outPath</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>29</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>30</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func setOutPath(outPath: String) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>31</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        this.outPath = outPath</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>32</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>33</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>34</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>35</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Parse local file header</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>36</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>37</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param buff Local file data</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>38</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param fileType Local file type</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>39</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>40</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @return Return the parsed file header</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>41</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since 0.28.4</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>42</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>43</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func parseLocalFileHeader(buff: Array<UInt8>, fileType: HashMap<String, CentralDirectoryRecord>): ArrayList<LocalFileHeader> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>44</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var length = buff.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>45</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var localFileHeaderSigStartPosition = ArrayList<Int64>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>46</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in 0..length) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>47</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (index + 3 >= length) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>48</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>49</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>50</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var buffer = Array<UInt8>([buff[index], buff[index + 1], buff[index + 2], buff[index + 3]])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>51</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var locSig = readIntLittleEndian(buffer, LOC_HDR_SIG_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>52</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (locSig == LOCSIG) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>53</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                localFileHeaderSigStartPosition.add(index)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>54</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>55</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>56</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        localFileHeaderSigStartPosition.add(length)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>57</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var size = localFileHeaderSigStartPosition.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>58</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var lfhList = ArrayList<LocalFileHeader>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>59</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in 0..size) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>60</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (index + 1 >= size) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>61</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>62</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>63</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var start = localFileHeaderSigStartPosition[index]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>64</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var end = localFileHeaderSigStartPosition[index + 1]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>65</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var buffer = subArray(buff, start, end)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>66</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var sig = readIntLittleEndian(buffer, LOC_HDR_SIG_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>67</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var version = readShortLittleEndian(buffer, LOC_HDR_VER_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>68</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var flag = readShortLittleEndian(buffer, LOC_HDR_FLG_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>69</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var flagArr = MsDosUtils.convertToBinary(flag, length: 16)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>70</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var meth = readShortLittleEndian(buffer, LOC_HDR_HOW_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>71</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var dateTime = readIntLittleEndian(buffer, LOC_HDR_TIM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>72</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var time = readShortLittleEndian(buffer, LOC_HDR_TIM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>73</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var date = readShortLittleEndian(buffer, LOC_HDR_DAT_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>74</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var crc = readIntLittleEndian(buffer, LOC_HDR_CRC_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>75</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var compressedSize = readIntLittleEndian(buffer, LOC_HDR_SIZ_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>76</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var uncompressedSize = readIntLittleEndian(buffer, LOC_HDR_LEN_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>77</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileNameLength = readShortLittleEndian(buffer, LOC_HDR_NAM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>78</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var extraFieldLength = readShortLittleEndian(buffer, LOC_HDR_EXT_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>79</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileNameArr = subArray(buffer, LOC_HDR_FNM_OFFSET, (LOC_HDR_FNM_OFFSET + fileNameLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>80</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var length = flagArr.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>81</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var isUtf8:Bool=(flagArr[length - 12] != 0)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>82</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileName=""</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>83</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (isUtf8) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>84</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                 fileName = String.fromUtf8(fileNameArr, start: 0, length: fileNameLength, isAscii: true)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>85</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }else {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>86</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                 fileName=gb18030(fileNameArr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>87</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>88</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var sub = subArray(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>89</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                buffer,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>90</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                LOC_HDR_FNM_OFFSET + fileNameLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>91</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                LOC_HDR_FNM_OFFSET + fileNameLength + compressedSize</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>92</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>93</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fType = fileType[fileName]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>94</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (!fType.isDirectory) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>95</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                match (meth) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>96</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    case 0 => logger.info("No need to decompress!") //STORE</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>97</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    case 8 =></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>98</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                        //DEFLATE</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>99</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        sub = Array(zipInflate(sub))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>100</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        logger.info("Unpack the success")</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>101</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    case 99 => //AES_INTERNAL_ONLY</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>102</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                        logger.info("Compression method:$[meth} does not support!")</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>103</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    case _ => throw RuntimeException("Compression method:$[meth} does not support!")</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>104</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>105</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                if (outPath != "") {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>106</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    var file = FileUtils.getFilePath(outPath, fileName)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>107</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    if (!fType.isDirectory) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>108</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        FileUtils.writeFile(sub, file)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>109</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>110</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>111</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>112</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var lfh = LocalFileHeader(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>113</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                sig,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>114</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                version,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>115</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                flag,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>116</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                meth,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>117</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                time,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>118</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                date,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>119</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                crc,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>120</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                compressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>121</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                uncompressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>122</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                fileNameLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>123</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                extraFieldLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>124</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                fileName,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>125</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                sub</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>126</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>127</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            lfhList.add(lfh)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>128</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>129</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return lfhList</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>130</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>131</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>132</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>133</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Zip deflate</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>134</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>135</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func zipDeflate(input: Array<UInt8>, param: ZipParams): Array<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>136</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var deflate = Deflate()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>137</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var comprLen = input.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>138</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var ret: UInt32 = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>139</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        ret = deflate.deflateInit(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>140</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            wrap: WrapType.DEFLATE,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>141</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            level: param.level,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>142</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            wbits: DEF_WINDOW_BITS,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>143</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            mlevel: DEF_MEM_LEVEL,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>144</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            strategy: Z_DEFAULT_STRATEGY</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>145</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>146</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var outlength = deflate.deflateBound(input.size())</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>147</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var outbuf = Array<UInt8>(outlength, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>148</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        deflate.setInBuf(input)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>149</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        deflate.setOutBuf(outbuf)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>150</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        ret = deflate.deflate(Z_FINISH)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>151</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        ret = deflate.deflateEnd()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>152</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return outbuf[0..deflate.getOutDataLength()]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>153</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>154</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>155</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>156</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Zip inflate</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>157</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>158</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func zipInflate(input: Array<UInt8>): ArrayList<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>159</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var retbuf: ArrayList<UInt8> = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>160</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        if (input.size() > 0) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>161</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var inflate = Inflate()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>162</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var comprLen = input.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>163</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var ret: UInt32 = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>164</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var outbuf = Array<UInt8>(comprLen, @overflowSaturating{i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>165</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            inflate.inflateInit(wrap: WrapType.DEFLATE, wbits: DEF_WINDOW_BITS, ischeck: true)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>166</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            inflate.setInBuf(input)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>167</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            inflate.setOutBuf(outbuf)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>168</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            while (true) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>169</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                ret = inflate.inflate(Z_NO_FLUSH)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>170</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                if (ret == Z_OK) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>171</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    if (inflate.isHaveOutData()) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>172</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        retbuf.addAll(outbuf[0..inflate.getOutDataLength()])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>173</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        inflate.resetOutBuf()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>174</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>175</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                } else if (ret == Z_STREAM_END) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>176</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    if (inflate.isHaveOutData()) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>177</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        retbuf.addAll(outbuf[0..inflate.getOutDataLength()])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>178</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        inflate.resetOutBuf()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>179</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>180</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>181</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                } else {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>182</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    throw RuntimeException("zip inflate" + inflate.message)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>183</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>184</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>185</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            ret = inflate.inflateEnd()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>186</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>187</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return retbuf</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>188</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>189</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>190</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>191</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Parse central directory record</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>192</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>193</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param buff central directory</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>194</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param endCDR Define the end of central directory record field</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>195</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>196</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @return Return parsed data</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>197</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since 0.28.4</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>198</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>199</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func parseCentralDirectoryRecord(buff: Array<UInt8>, endCDR: EndCDR): HashMap<String, CentralDirectoryRecord> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>200</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var cdrData = splitCentralDirectoryRecord(buff, endCDR)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>201</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var fileType = HashMap<String, CentralDirectoryRecord>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>202</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (key in cdrData.keys()) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>203</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var entryData = cdrData.get(key)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>204</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var buff = Array<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>205</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            match (entryData) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>206</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                case Some(data) => buff = data</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>207</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                case None => break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>208</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>209</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var sig = readIntLittleEndian(buff, CEN_SIG_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>210</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (CENSIG != sig) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>211</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                throw RuntimeException("Parse central directory record faild")</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>212</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>213</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var versionMadeBy = readShortLittleEndian(buff, CEN_VEM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>214</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var versionNeededToExtract = readShortLittleEndian(buff, CEN_VER_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>215</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var flag = readShortLittleEndian(buff, CEN_FLG_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>216</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var flagArr = MsDosUtils.convertToBinary(flag, length: 16)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>217</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var compressionMethod = readShortLittleEndian(buff, CEN_HOW_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>218</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var lastModifiedTime = readShortLittleEndian(buff, CEN_TIM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>219</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var lastModifiedDate = readShortLittleEndian(buff, CEN_DAT_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>220</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var crc = readLongLittleEndian(buff, CEN_CRC_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>221</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var compressedSize = readLongLittleEndian(buff, CEN_SIZ_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>222</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var uncompressedSize = readLongLittleEndian(buff, CEN_LEN_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>223</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileNameLength = readShortLittleEndian(buff, CEN_NAM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>224</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var extraFieldLength = readShortLittleEndian(buff, CEN_EXT_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>225</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileCommentLength = readShortLittleEndian(buff, CEN_COM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>226</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var diskNumberStart = readShortLittleEndian(buff, CEN_DSK_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>227</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var internalFileAttributes = readShortLittleEndian(buff, CEN_ATT_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>228</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var externalFileAttributes = readLongLittleEndian(buff, CEN_ATX_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>229</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var offsetLocalHeader = readLongLittleEndian(buff, CEN_OFF_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>230</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileNameArr = Array<UInt8>(fileNameLength, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>231</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var j = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>232</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            for (index in CEN_FNM_OFFSET..CEN_FNM_OFFSET + fileNameLength) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>233</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                fileNameArr[j] = buff[index]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>234</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                j++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>235</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>236</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var length = flagArr.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>237</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var isUtf8:Bool=(flagArr[length - 12] != 0)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>238</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var fileName=""</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>239</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (isUtf8) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>240</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                 fileName = String.fromUtf8(fileNameArr, start: 0, length: fileNameLength, isAscii: true)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>241</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }else {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>242</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                 fileName=gb18030(fileNameArr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>243</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>244</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var isDirectory = (fileName != "" && (fileName.endsWith("/") || fileName.endsWith("\\")))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>245</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var cdr = CentralDirectoryRecord(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>246</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                CENSIG,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>247</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                versionMadeBy,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>248</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                versionNeededToExtract,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>249</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                flag,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>250</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                compressionMethod,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>251</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                lastModifiedTime,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>252</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                lastModifiedDate,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>253</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                crc,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>254</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                compressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>255</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                uncompressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>256</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                fileNameLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>257</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                extraFieldLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>258</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                fileCommentLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>259</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                diskNumberStart,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>260</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                internalFileAttributes,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>261</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                externalFileAttributes,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>262</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                offsetLocalHeader,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>263</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                fileName,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>264</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                isDirectory</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>265</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>266</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            cdr.setEncrypted(flagArr[length - 1] != 0)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>267</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            cdr.setUtf8(isUtf8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>268</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var file = FileUtils.getFilePath(outPath, cdr.fileName)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>269</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (outPath != "" && cdr.isDirectory) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>270</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                file = file.slice(0, file.size() - 1).toString()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>271</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                var dir = io.DirectoryInfo(file)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>272</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                if (!dir.exist()) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>273</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    dir.create()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>274</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>275</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>276</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            fileType.put(fileName, cdr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>277</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>278</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>279</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return fileType</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>280</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>281</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>282</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>283</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *Split central directory record</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>284</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>285</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func splitCentralDirectoryRecord(buff: Array<UInt8>, endCDR: EndCDR): HashMap<Int64, Array<UInt8>> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>286</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        let entrieSize = endCDR.totalNumberOfEntriesInCentralDirectory</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>287</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        let offsetOfStartOfCentralDirectory = endCDR.offsetOfStartOfCentralDirectory</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>288</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var cdrBuff = subArray(buff, offsetOfStartOfCentralDirectory, buff.size())</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>289</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var size = cdrBuff.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>290</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var sigPositionArr = Array<Int64>(entrieSize, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>291</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var startPos = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>292</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var nextPos = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>293</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var map = HashMap<Int64, Array<UInt8>>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>294</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var entryIndex = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>295</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in 0..size) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>296</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (index + 3 >= size) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>297</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                var arr = Array<UInt8>(size - nextPos, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>298</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                var j = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>299</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                for (i in nextPos..size) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>300</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    arr[j] = cdrBuff[i]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>301</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    j++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>302</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>303</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                map.put(entryIndex, arr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>304</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>305</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>306</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var buffer = Array<UInt8>([cdrBuff[index], cdrBuff[index + 1], cdrBuff[index + 2], cdrBuff[index + 3]])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>307</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let sig = readIntLittleEndian(buffer, 0)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>308</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (sig == CENSIG) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>309</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                startPos = nextPos</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>310</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                nextPos = index</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>311</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                if (startPos != nextPos) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>312</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    var arr = Array<UInt8>(nextPos - startPos, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>313</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    var j = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>314</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    for (i in startPos..nextPos) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>315</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        arr[j] = cdrBuff[i]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>316</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                        j++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>317</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>318</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    map.put(entryIndex, arr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>319</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                    entryIndex++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>320</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>321</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>322</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>323</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return map</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>324</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>325</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>326</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>327</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *Interception of array</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>328</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>329</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func subArray(arr: Array<UInt8>, fromIndex: Int64, toIndex: Int64): Array<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>330</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var array = Array<UInt8>(toIndex - fromIndex, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>331</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var i = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>332</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in fromIndex..toIndex) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>333</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            array[i] = arr[index]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>334</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            i++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>335</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>336</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return array</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>337</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>338</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>339</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>340</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Parse end of central directory record</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>341</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>342</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param buff The end of central directory record</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>343</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>344</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @return Return end of central directory record data</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>345</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>346</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>347</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func parseEndOfCentralDirectory(buff: Array<UInt8>): EndCDR {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>348</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var arr = readEndOfCentralDirectoryRecord(buff)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>349</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var ecdSize = arr.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>350</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        if (ecdSize < 1) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>351</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>            throw RuntimeException("End Of Central Directory Record is empty!")</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>352</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>353</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var offsetOfEndOfCentralDirectory = buff.size() - arr.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>354</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var sig = readIntLittleEndian(arr, END_SIG_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>355</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var numberOfThisDisk = readShortLittleEndian(arr, END_NMD_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>356</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var numberOfThisDiskStartOfCentralDir = readShortLittleEndian(arr, END_DSK_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>357</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var totalNumberOfEntriesInCentralDirectoryOnThisDisk = readShortLittleEndian(arr, END_TOD_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>358</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var totalNumberOfEntriesInCentralDirectory = readShortLittleEndian(arr, END_TOT_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>359</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var sizeOfCentralDirectory = readIntLittleEndian(arr, END_SIZ_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>360</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var offsetOfStartOfCentralDirectory = readIntLittleEndian(arr, END_OFF_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>361</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var commentLength = readShortLittleEndian(arr, END_COM_OFFSET)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>362</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var endCdr = EndCDR(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>363</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            sig,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>364</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            numberOfThisDisk,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>365</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            numberOfThisDiskStartOfCentralDir,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>366</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            totalNumberOfEntriesInCentralDirectoryOnThisDisk,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>367</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            totalNumberOfEntriesInCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>368</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            sizeOfCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>369</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            offsetOfEndOfCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>370</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            offsetOfStartOfCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>371</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            commentLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>372</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            ""</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>373</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>374</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return endCdr</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>375</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>376</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>377</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>378</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *Read end central directory records data</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>379</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>380</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func readEndOfCentralDirectoryRecord(buff: Array<UInt8>): Array<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>381</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        let length = buff.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>382</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        if (length < END_HDR_SIZE) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>383</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>            return Array<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>384</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>385</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var startPos = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>386</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        if (readIntLittleEndian(buff, length - END_HDR_SIZE) == ENDSIG) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>387</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            startPos = length - END_HDR_SIZE</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>388</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        } else {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>389</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>            for (index in length - 1..=0 : -1) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>390</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                if (index - 3 < 0) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>391</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    return Array<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>392</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>393</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                var buffer = Array<UInt8>([buff[index], buff[index - 1], buff[index - 2], buff[index - 3]])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>394</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                buffer.reverse()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>395</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                var endSig = readIntLittleEndian(buffer, 0)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>396</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                if (endSig == ENDSIG) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>397</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    startPos = index - 3</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>398</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>                    break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>399</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>400</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>401</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>402</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var arr = Array<UInt8>(length - startPos, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>403</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var i = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>404</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in startPos..length) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>405</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            arr[i] = buff[index]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>406</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            i++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>407</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>408</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return arr</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>409</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>410</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func readLongLittleEndian(buff: Array<UInt8>, pos: Int64): Int64 {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>411</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var longBuff = Array<Int64>(8, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>412</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var position = pos</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>413</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in 0..4) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>414</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            longBuff[index] = Int64(buff[position])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>415</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            position++</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>416</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>417</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var temp: Int64 = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>418</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[7] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>419</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>420</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[6] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>421</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>422</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[5] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>423</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>424</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[4] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>425</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>426</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[3] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>427</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>428</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[2] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>429</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>430</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[1] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>431</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp = rotate(temp, 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>432</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        temp |= longBuff[0] & 0xff</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>433</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return temp</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>434</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>435</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>436</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func readIntLittleEndian(b: Array<UInt8>, pos: Int64): Int64 {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>437</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var index0 = Int64(b[pos])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>438</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var index1 = rotate(Int64(b[pos + 1]), 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>439</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var index2 = Int64(b[pos + 2])</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>440</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var index3 = rotate((Int64(b[pos + 3])), 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>441</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return rotate(index3 | index2, 16) | index1 | index0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>442</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>443</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>444</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func readShortLittleEndian(buff: Array<UInt8>, position: Int64): Int64 {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>445</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return Int64(buff[position]) | rotate(Int64(buff[1 + position]), 8)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>446</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>447</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>448</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>449</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Convert the data to ZIP bytes</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>450</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>451</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func convertToLittleEndian(value: Int64, length!: Int64 = 2): Array<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>452</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var val = value</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>453</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var valArr = ArrayList<Int64>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>454</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        while (true) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>455</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            valArr.add(val % HEXADECIMAL)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>456</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            val = val / HEXADECIMAL</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>457</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            if (val < HEXADECIMAL) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>458</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                valArr.add(val)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>459</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                break</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>460</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>461</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>462</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        if (valArr.size() % 2 != 0) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>463</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            valArr.add(0)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>464</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>465</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.reverse()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>466</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        let size = valArr.size() / 2</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>467</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var array = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>468</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (i in 0..size) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>469</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var first = valArr[i * 2]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>470</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var second = valArr[i * 2 + 1]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>471</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            array.add(UInt8(first * HEXADECIMAL + second))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>472</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>473</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        array.reverse()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>474</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var arr = Array<UInt8>(length, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>475</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in 0..array.size()) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>476</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            arr[index] = array[index]</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>477</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>478</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return arr</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>479</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>480</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>481</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>482</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Write central cirectory rcecord</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>483</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>484</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param cdr Central directory record</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>485</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>486</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @return Return the data after write</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>487</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>488</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>489</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func writeCentralDirectoryRecord(cdr: CentralDirectoryRecord): ArrayList<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>490</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var valArr = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>491</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.signature, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>492</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.versionMadeBy))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>493</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.versionExtract))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>494</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.generalPurposeBitFlag))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>495</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.compressionMethod))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>496</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.lastModFileTime))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>497</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.lastModFileDate))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>498</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.crc32, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>499</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.compressedSize, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>500</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.uncompressedSize, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>501</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.fileNameLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>502</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.extraFieldLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>503</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.commentLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>504</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.offsetOfStartOfCentralDirectory))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>505</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.internalFileAttributes))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>506</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.externalFileAttributes, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>507</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(cdr.relativeOffSetOfLocalFileHeader, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>508</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(cdr.fileName.toUtf8Array())</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>509</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return valArr</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>510</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>511</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>512</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>513</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Write local file header</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>514</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>515</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param lfh Local file header information</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>516</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>517</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @return Return data after writing</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>518</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>519</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>520</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func writeLocalFileHeader(lfh: LocalFileHeader): ArrayList<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>521</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var valArr = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>522</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.signature, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>523</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.versionExtract))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>524</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.generalPurposeBitFlag))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>525</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.compressionMethod))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>526</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.lastModFileTime))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>527</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.lastModFileDate))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>528</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.crc32, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>529</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.compressedSize, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>530</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.uncompressedSize, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>531</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.fileNameLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>532</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(lfh.extraFieldLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>533</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(lfh.fileName.toUtf8Array())</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>534</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return valArr</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>535</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>536</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>537</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>538</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Write the end of central directory record field</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>539</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>540</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param endCDR Define the end of central directory record field</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>541</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>542</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @return Return data after operation</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>543</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since 0.28.4</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>544</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>545</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func writeEndOfCentralDirectoryRecord(endCDR: EndCDR): ArrayList<UInt8> {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>546</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var valArr = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>547</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.sig, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>548</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.diskNum))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>549</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.numberOfThisDiskStartOfCentralDir))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>550</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.totalNumberOfEntriesInCentralDirectoryOnThisDisk))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>551</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.totalNumberOfEntriesInCentralDirectory))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>552</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.sizeOfCentralDirectory, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>553</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.offsetOfStartOfCentralDirectory, length: 4))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>554</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        valArr.addAll(convertToLittleEndian(endCDR.commentLength))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>555</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        if (endCDR.comment != "") {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>556</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>            valArr.addAll(endCDR.comment.toUtf8Array())</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>557</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>558</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return valArr</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>559</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>560</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>561</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    /*</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>562</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * Write data to Zip File</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>563</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>564</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param files Zip File data</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>565</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @param zipParam Zip param</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>566</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     *</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>567</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     * @since 0.28.4</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>568</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>     */</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>569</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    public func writeZipFile(files: HashSet<String>, zipParam: ZipParams) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>570</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var fileNum = files.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>571</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var time = Time.now(Location.Local)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>572</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var localFileLst = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>573</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var cdrLst = ArrayList<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>574</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (file in files) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>575</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let fileData = FileUtils.readFile(file)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>576</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let deflate = zipDeflate(fileData, zipParam)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>577</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let fileName = FileUtils.getFileName(file)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>578</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let fileNameLength = fileName.toUtf8Array().size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>579</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let compressedSize = deflate.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>580</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            let uncompressedSize = fileData.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>581</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var crc = zlib.crc32(0, fileData, 0, uncompressedSize)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>582</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var lfh: LocalFileHeader = LocalFileHeader(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>583</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                LOCSIG,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>584</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                20,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>585</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                generalPurposeBitFlag(),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>586</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                CompressionMethod.DEFLATE,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>587</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                MsDosUtils.getLastModFileTime(time),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>588</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                MsDosUtils.getLastModFileDate(time),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>589</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                Int64(crc),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>590</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                compressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>591</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                uncompressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>592</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                fileNameLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>593</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>594</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                fileName,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>595</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                Array<UInt8>()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>596</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>597</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var relativeOffSetOfLocalFileHeader = localFileLst.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>598</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var lfhArrayList = writeLocalFileHeader(lfh)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>599</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            localFileLst.addAll(lfhArrayList)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>600</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            localFileLst.addAll(deflate)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>601</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var cdr: CentralDirectoryRecord = CentralDirectoryRecord(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>602</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                CENSIG,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>603</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                20,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>604</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                20,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>605</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                generalPurposeBitFlag(),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>606</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                CompressionMethod.DEFLATE,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>607</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                MsDosUtils.getLastModFileTime(time),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>608</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                MsDosUtils.getLastModFileDate(time),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>609</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                Int64(crc),</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>610</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                compressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>611</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                uncompressedSize,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>612</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                fileNameLength,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>613</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>614</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>615</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>616</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>617</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>618</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>                relativeOffSetOfLocalFileHeader,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>619</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>                fileName</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>620</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>621</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            var cdrData = writeCentralDirectoryRecord(cdr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>622</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            cdrLst.addAll(cdrData)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>623</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>624</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var offsetOfStartOfCentralDirectory = localFileLst.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>625</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        localFileLst.addAll(cdrLst)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>626</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var offsetOfEndOfCentralDirectory = localFileLst.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>627</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var sizeOfCentralDirectory = cdrLst.size()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>628</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var endCDR: EndCDR = EndCDR(</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>629</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            ENDSIG,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>630</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>631</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>632</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            fileNum,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>633</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            fileNum,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>634</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            sizeOfCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>635</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            offsetOfEndOfCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>636</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            offsetOfStartOfCentralDirectory,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>637</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            0,</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>638</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            ""</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>639</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        )</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>640</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var endCDRLst = writeEndOfCentralDirectoryRecord(endCDR)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>641</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        localFileLst.addAll(endCDRLst)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>642</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        FileUtils.writeFile(Array(localFileLst), outPath)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>643</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>644</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>645</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>    private func gb18030(arr:Array<UInt8>):String {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>646</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>          var charset = match(Charsets.forName("gb18030")){</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>647</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>            case Some(cs) => cs</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>648</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>            case _ => Charsets.gb18030</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>649</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>650</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>        var decoder = charset.newDecoder()</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>651</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>        return decoder.decode(arr)</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>652</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>653</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre></pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>654</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>    private func generalPurposeBitFlag(utf8!:Int64=1,encrypted!:Int64=0):Int64{</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>655</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var flagArr = Array<Int64>(GENERAL_PURPOSE_BIT_FLAG_SIZE, {i => 0})</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>656</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        flagArr[GENERAL_PURPOSE_BIT_FLAG_SIZE - 12] = utf8</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>657</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        flagArr[GENERAL_PURPOSE_BIT_FLAG_SIZE - 1] = encrypted</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>658</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        var sum: Int64 = 0</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>659</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        for (index in 0..GENERAL_PURPOSE_BIT_FLAG_SIZE) {</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>660</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>            sum += flagArr[index] * (2 ** (GENERAL_PURPOSE_BIT_FLAG_SIZE - index - 1))</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>661</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>        }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>662</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount coveredLine"><pre>Y</pre></td>

<td align="left" class="src coveredLine"><pre>        return sum</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>663</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount uncoveredLine"><pre>N</pre></td>

<td align="left" class="src uncoveredLine"><pre>        return sum</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>664</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>    }</pre></td>

</tr>

<tr>

<td align="right" class="lineno"><pre>665</pre></td>

<td align="right" class="linebranch"></td>

<td align="center" class="linecount "><pre></pre></td>

<td align="left" class="src "><pre>}</pre></td>

</tr>



  </table>

  <br>



  <table width="100%" border="0" cellspacing="0" cellpadding="0">

    <tr><td class="hr"><td></tr>

    <tr><td class="footer">Generated by: cjcov (Version 1.0.0)</a></td></tr>

  </table>

  <br>



</body>



</html>