{"version":3,"sources":["pdf_viewer.js","compatibility.js","pdfmake.js","vfs.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5vOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACj0hEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pdf.built.js","sourcesContent":["/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Initializing PDFJS global object (if still undefined)\nif (typeof PDFJS === 'undefined') {\n (typeof window !== 'undefined' ? window : this).PDFJS = {};\n}\n\nPDFJS.version = '0.8.765';\nPDFJS.build = '88ec2bd';\n\n(function pdfjsWrapper() {\n // Use strict in our context only - users might not want it\n 'use strict';\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL */\n\n'use strict';\n\nvar globalScope = (typeof window === 'undefined') ? this : window;\n\nvar isWorker = (typeof window == 'undefined');\n\nvar ERRORS = 0, WARNINGS = 1, INFOS = 5;\nvar verbosity = WARNINGS;\n\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\nvar TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4\n};\n\n// The global PDFJS object exposes the API\n// In production, it will be declared outside a global wrapper\n// In development, it will be declared here\nif (!globalScope.PDFJS) {\n globalScope.PDFJS = {};\n}\n\nglobalScope.PDFJS.pdfBug = false;\n\n// All the possible operations for an operator list.\nvar OPS = PDFJS.OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87\n};\n\n// Use only for debugging purposes. This should not be used in any code that is\n// in mozilla master.\nvar log = (function() {\n if ('console' in globalScope && 'log' in globalScope['console']) {\n return globalScope['console']['log'].bind(globalScope['console']);\n } else {\n return function nop() {\n };\n }\n})();\n\n// A notice for devs that will not trigger the fallback UI. These are good\n// for things that are helpful to devs, such as warning that Workers were\n// disabled, which is important to devs but not end users.\nfunction info(msg) {\n if (verbosity >= INFOS) {\n log('Info: ' + msg);\n PDFJS.LogManager.notify('info', msg);\n }\n}\n\n// Non-fatal warnings that should trigger the fallback UI.\nfunction warn(msg) {\n if (verbosity >= WARNINGS) {\n log('Warning: ' + msg);\n PDFJS.LogManager.notify('warn', msg);\n }\n}\n\n// Fatal errors that should trigger the fallback UI and halt execution by\n// throwing an exception.\nfunction error(msg) {\n // If multiple arguments were passed, pass them all to the log function.\n if (arguments.length > 1) {\n var logArguments = ['Error:'];\n logArguments.push.apply(logArguments, arguments);\n log.apply(null, logArguments);\n // Join the arguments into a single string for the lines below.\n msg = [].join.call(arguments, ' ');\n } else {\n log('Error: ' + msg);\n }\n log(backtrace());\n PDFJS.LogManager.notify('error', msg);\n throw new Error(msg);\n}\n\n// Missing features that should trigger the fallback UI.\nfunction TODO(what) {\n warn('TODO: ' + what);\n}\n\nfunction backtrace() {\n try {\n throw new Error();\n } catch (e) {\n return e.stack ? e.stack.split('\\n').slice(2).join('\\n') : '';\n }\n}\n\nfunction assert(cond, msg) {\n if (!cond)\n error(msg);\n}\n\n// Combines two URLs. The baseUrl shall be absolute URL. If the url is an\n// absolute URL, it will be returned as is.\nfunction combineUrl(baseUrl, url) {\n if (!url)\n return baseUrl;\n if (url.indexOf(':') >= 0)\n return url;\n if (url.charAt(0) == '/') {\n // absolute path\n var i = baseUrl.indexOf('://');\n i = baseUrl.indexOf('/', i + 3);\n return baseUrl.substring(0, i) + url;\n } else {\n // relative path\n var pathLength = baseUrl.length, i;\n i = baseUrl.lastIndexOf('#');\n pathLength = i >= 0 ? i : pathLength;\n i = baseUrl.lastIndexOf('?', pathLength);\n pathLength = i >= 0 ? i : pathLength;\n var prefixLength = baseUrl.lastIndexOf('/', pathLength);\n return baseUrl.substring(0, prefixLength + 1) + url;\n }\n}\n\n// Validates if URL is safe and allowed, e.g. to avoid XSS.\nfunction isValidUrl(url, allowRelative) {\n if (!url) {\n return false;\n }\n var colon = url.indexOf(':');\n if (colon < 0) {\n return allowRelative;\n }\n var protocol = url.substr(0, colon);\n switch (protocol) {\n case 'http':\n case 'https':\n case 'ftp':\n case 'mailto':\n return true;\n default:\n return false;\n }\n}\nPDFJS.isValidUrl = isValidUrl;\n\n// In a well-formed PDF, |cond| holds. If it doesn't, subsequent\n// behavior is undefined.\nfunction assertWellFormed(cond, msg) {\n if (!cond)\n error(msg);\n}\n\nvar LogManager = PDFJS.LogManager = (function LogManagerClosure() {\n var loggers = [];\n return {\n addLogger: function logManager_addLogger(logger) {\n loggers.push(logger);\n },\n notify: function(type, message) {\n for (var i = 0, ii = loggers.length; i < ii; i++) {\n var logger = loggers[i];\n if (logger[type])\n logger[type](message);\n }\n }\n };\n})();\n\nfunction shadow(obj, prop, value) {\n Object.defineProperty(obj, prop, { value: value,\n enumerable: true,\n configurable: true,\n writable: false });\n return value;\n}\n\nvar PasswordResponses = PDFJS.PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2\n};\n\nvar PasswordException = (function PasswordExceptionClosure() {\n function PasswordException(msg, code) {\n this.name = 'PasswordException';\n this.message = msg;\n this.code = code;\n }\n\n PasswordException.prototype = new Error();\n PasswordException.constructor = PasswordException;\n\n return PasswordException;\n})();\n\nvar UnknownErrorException = (function UnknownErrorExceptionClosure() {\n function UnknownErrorException(msg, details) {\n this.name = 'UnknownErrorException';\n this.message = msg;\n this.details = details;\n }\n\n UnknownErrorException.prototype = new Error();\n UnknownErrorException.constructor = UnknownErrorException;\n\n return UnknownErrorException;\n})();\n\nvar InvalidPDFException = (function InvalidPDFExceptionClosure() {\n function InvalidPDFException(msg) {\n this.name = 'InvalidPDFException';\n this.message = msg;\n }\n\n InvalidPDFException.prototype = new Error();\n InvalidPDFException.constructor = InvalidPDFException;\n\n return InvalidPDFException;\n})();\n\nvar MissingPDFException = (function MissingPDFExceptionClosure() {\n function MissingPDFException(msg) {\n this.name = 'MissingPDFException';\n this.message = msg;\n }\n\n MissingPDFException.prototype = new Error();\n MissingPDFException.constructor = MissingPDFException;\n\n return MissingPDFException;\n})();\n\nvar NotImplementedException = (function NotImplementedExceptionClosure() {\n function NotImplementedException(msg) {\n this.message = msg;\n }\n\n NotImplementedException.prototype = new Error();\n NotImplementedException.prototype.name = 'NotImplementedException';\n NotImplementedException.constructor = NotImplementedException;\n\n return NotImplementedException;\n})();\n\nvar MissingDataException = (function MissingDataExceptionClosure() {\n function MissingDataException(begin, end) {\n this.begin = begin;\n this.end = end;\n this.message = 'Missing data [' + begin + ', ' + end + ')';\n }\n\n MissingDataException.prototype = new Error();\n MissingDataException.prototype.name = 'MissingDataException';\n MissingDataException.constructor = MissingDataException;\n\n return MissingDataException;\n})();\n\nvar XRefParseException = (function XRefParseExceptionClosure() {\n function XRefParseException(msg) {\n this.message = msg;\n }\n\n XRefParseException.prototype = new Error();\n XRefParseException.prototype.name = 'XRefParseException';\n XRefParseException.constructor = XRefParseException;\n\n return XRefParseException;\n})();\n\n\nfunction bytesToString(bytes) {\n var str = '';\n var length = bytes.length;\n for (var n = 0; n < length; ++n)\n str += String.fromCharCode(bytes[n]);\n return str;\n}\n\nfunction stringToBytes(str) {\n var length = str.length;\n var bytes = new Uint8Array(length);\n for (var n = 0; n < length; ++n)\n bytes[n] = str.charCodeAt(n) & 0xFF;\n return bytes;\n}\n\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\n\nvar Util = PDFJS.Util = (function UtilClosure() {\n function Util() {}\n\n Util.makeCssRgb = function Util_makeCssRgb(rgb) {\n return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';\n };\n\n Util.makeCssCmyk = function Util_makeCssCmyk(cmyk) {\n var rgb = ColorSpace.singletons.cmyk.getRgb(cmyk, 0);\n return Util.makeCssRgb(rgb);\n };\n\n // Concatenates two transformation matrices together and returns the result.\n Util.transform = function Util_transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n };\n\n // For 2d affine transforms\n Util.applyTransform = function Util_applyTransform(p, m) {\n var xt = p[0] * m[0] + p[1] * m[2] + m[4];\n var yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n };\n\n Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {\n var d = m[0] * m[3] - m[1] * m[2];\n var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n };\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n Util.getAxialAlignedBoundingBox =\n function Util_getAxialAlignedBoundingBox(r, m) {\n\n var p1 = Util.applyTransform(r, m);\n var p2 = Util.applyTransform(r.slice(2, 4), m);\n var p3 = Util.applyTransform([r[0], r[3]], m);\n var p4 = Util.applyTransform([r[2], r[1]], m);\n return [\n Math.min(p1[0], p2[0], p3[0], p4[0]),\n Math.min(p1[1], p2[1], p3[1], p4[1]),\n Math.max(p1[0], p2[0], p3[0], p4[0]),\n Math.max(p1[1], p2[1], p3[1], p4[1])\n ];\n };\n\n Util.inverseTransform = function Util_inverseTransform(m) {\n var d = m[0] * m[3] - m[1] * m[2];\n return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n };\n\n // Apply a generic 3d matrix M on a 3-vector v:\n // | a b c | | X |\n // | d e f | x | Y |\n // | g h i | | Z |\n // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n // with v as [X,Y,Z]\n Util.apply3dTransform = function Util_apply3dTransform(m, v) {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2]\n ];\n };\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n Util.singularValueDecompose2dScale =\n function Util_singularValueDecompose2dScale(m) {\n\n var transpose = [m[0], m[2], m[1], m[3]];\n\n // Multiply matrix m with its transpose.\n var a = m[0] * transpose[0] + m[1] * transpose[2];\n var b = m[0] * transpose[1] + m[1] * transpose[3];\n var c = m[2] * transpose[0] + m[3] * transpose[2];\n var d = m[2] * transpose[1] + m[3] * transpose[3];\n\n // Solve the second degree polynomial to get roots.\n var first = (a + d) / 2;\n var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\n var sx = first + second || 1;\n var sy = first - second || 1;\n\n // Scale values are the square roots of the eigenvalues.\n return [Math.sqrt(sx), Math.sqrt(sy)];\n };\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n Util.normalizeRect = function Util_normalizeRect(rect) {\n var r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n };\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'false'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n Util.intersect = function Util_intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n // Order points along the axes\n var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),\n orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),\n result = [];\n\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n // X: first and second points belong to different rectangles?\n if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {\n // Intersection must be between second and third points\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return false;\n }\n\n // Y: first and second points belong to different rectangles?\n if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {\n // Intersection must be between second and third points\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return false;\n }\n\n return result;\n };\n\n Util.sign = function Util_sign(num) {\n return num < 0 ? -1 : 1;\n };\n\n // TODO(mack): Rename appendToArray\n Util.concatenateToArray = function concatenateToArray(arr1, arr2) {\n Array.prototype.push.apply(arr1, arr2);\n };\n\n Util.prependToArray = function concatenateToArray(arr1, arr2) {\n Array.prototype.unshift.apply(arr1, arr2);\n };\n\n Util.extendObj = function extendObj(obj1, obj2) {\n for (var key in obj2) {\n obj1[key] = obj2[key];\n }\n };\n\n Util.getInheritableProperty = function Util_getInheritableProperty(dict,\n name) {\n while (dict && !dict.has(name)) {\n dict = dict.get('Parent');\n }\n if (!dict) {\n return null;\n }\n return dict.get(name);\n };\n\n Util.inherit = function Util_inherit(sub, base, prototype) {\n sub.prototype = Object.create(base.prototype);\n sub.prototype.constructor = sub;\n for (var prop in prototype) {\n sub.prototype[prop] = prototype[prop];\n }\n };\n\n Util.loadScript = function Util_loadScript(src, callback) {\n var script = document.createElement('script');\n var loaded = false;\n script.setAttribute('src', src);\n if (callback) {\n script.onload = function() {\n if (!loaded) {\n callback();\n }\n loaded = true;\n };\n }\n document.getElementsByTagName('head')[0].appendChild(script);\n };\n\n return Util;\n})();\n\nvar PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {\n function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {\n this.viewBox = viewBox;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n var centerX = (viewBox[2] + viewBox[0]) / 2;\n var centerY = (viewBox[3] + viewBox[1]) / 2;\n var rotateA, rotateB, rotateC, rotateD;\n rotation = rotation % 360;\n rotation = rotation < 0 ? rotation + 360 : rotation;\n switch (rotation) {\n case 180:\n rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;\n break;\n case 90:\n rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;\n break;\n case 270:\n rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;\n break;\n //case 0:\n default:\n rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;\n break;\n }\n\n if (dontFlip) {\n rotateC = -rotateC; rotateD = -rotateD;\n }\n\n var offsetCanvasX, offsetCanvasY;\n var width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = Math.abs(viewBox[3] - viewBox[1]) * scale;\n height = Math.abs(viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = Math.abs(viewBox[2] - viewBox[0]) * scale;\n height = Math.abs(viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY\n ];\n\n this.width = width;\n this.height = height;\n this.fontScale = scale;\n }\n PageViewport.prototype = {\n clone: function PageViewPort_clone(args) {\n args = args || {};\n var scale = 'scale' in args ? args.scale : this.scale;\n var rotation = 'rotation' in args ? args.rotation : this.rotation;\n return new PageViewport(this.viewBox.slice(), scale, rotation,\n this.offsetX, this.offsetY, args.dontFlip);\n },\n convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {\n return Util.applyTransform([x, y], this.transform);\n },\n convertToViewportRectangle:\n function PageViewport_convertToViewportRectangle(rect) {\n var tl = Util.applyTransform([rect[0], rect[1]], this.transform);\n var br = Util.applyTransform([rect[2], rect[3]], this.transform);\n return [tl[0], tl[1], br[0], br[1]];\n },\n convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {\n return Util.applyInverseTransform([x, y], this.transform);\n }\n };\n return PageViewport;\n})();\n\nvar PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,\n 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,\n 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,\n 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC\n];\n\nfunction stringToPDFString(str) {\n var i, n = str.length, str2 = '';\n if (str[0] === '\\xFE' && str[1] === '\\xFF') {\n // UTF16BE BOM\n for (i = 2; i < n; i += 2)\n str2 += String.fromCharCode(\n (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1));\n } else {\n for (i = 0; i < n; ++i) {\n var code = PDFStringTranslateTable[str.charCodeAt(i)];\n str2 += code ? String.fromCharCode(code) : str.charAt(i);\n }\n }\n return str2;\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction isEmptyObj(obj) {\n for (var key in obj) {\n return false;\n }\n return true;\n}\n\nfunction isBool(v) {\n return typeof v == 'boolean';\n}\n\nfunction isInt(v) {\n return typeof v == 'number' && ((v | 0) == v);\n}\n\nfunction isNum(v) {\n return typeof v == 'number';\n}\n\nfunction isString(v) {\n return typeof v == 'string';\n}\n\nfunction isNull(v) {\n return v === null;\n}\n\nfunction isName(v) {\n return v instanceof Name;\n}\n\nfunction isCmd(v, cmd) {\n return v instanceof Cmd && (!cmd || v.cmd == cmd);\n}\n\nfunction isDict(v, type) {\n if (!(v instanceof Dict)) {\n return false;\n }\n if (!type) {\n return true;\n }\n var dictType = v.get('Type');\n return isName(dictType) && dictType.name == type;\n}\n\nfunction isArray(v) {\n return v instanceof Array;\n}\n\nfunction isStream(v) {\n return typeof v == 'object' && v !== null && v !== undefined &&\n ('getBytes' in v);\n}\n\nfunction isArrayBuffer(v) {\n return typeof v == 'object' && v !== null && v !== undefined &&\n ('byteLength' in v);\n}\n\nfunction isRef(v) {\n return v instanceof Ref;\n}\n\nfunction isPDFFunction(v) {\n var fnDict;\n if (typeof v != 'object')\n return false;\n else if (isDict(v))\n fnDict = v;\n else if (isStream(v))\n fnDict = v.dict;\n else\n return false;\n return fnDict.has('FunctionType');\n}\n\n/**\n * The following promise implementation tries to generally implment the\n * Promise/A+ spec. Some notable differences from other promise libaries are:\n * - There currently isn't a seperate deferred and promise object.\n * - Unhandled rejections eventually show an error if they aren't handled.\n *\n * Based off of the work in:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=810490\n */\nvar Promise = PDFJS.Promise = (function PromiseClosure() {\n var STATUS_PENDING = 0;\n var STATUS_RESOLVED = 1;\n var STATUS_REJECTED = 2;\n\n // In an attempt to avoid silent exceptions, unhandled rejections are\n // tracked and if they aren't handled in a certain amount of time an\n // error is logged.\n var REJECTION_TIMEOUT = 500;\n\n var HandlerManager = {\n handlers: [],\n running: false,\n unhandledRejections: [],\n pendingRejectionCheck: false,\n\n scheduleHandlers: function scheduleHandlers(promise) {\n if (promise._status == STATUS_PENDING) {\n return;\n }\n\n this.handlers = this.handlers.concat(promise._handlers);\n promise._handlers = [];\n\n if (this.running) {\n return;\n }\n this.running = true;\n\n setTimeout(this.runHandlers.bind(this), 0);\n },\n\n runHandlers: function runHandlers() {\n while (this.handlers.length > 0) {\n var handler = this.handlers.shift();\n\n var nextStatus = handler.thisPromise._status;\n var nextValue = handler.thisPromise._value;\n\n try {\n if (nextStatus === STATUS_RESOLVED) {\n if (typeof(handler.onResolve) == 'function') {\n nextValue = handler.onResolve(nextValue);\n }\n } else if (typeof(handler.onReject) === 'function') {\n nextValue = handler.onReject(nextValue);\n nextStatus = STATUS_RESOLVED;\n\n if (handler.thisPromise._unhandledRejection) {\n this.removeUnhandeledRejection(handler.thisPromise);\n }\n }\n } catch (ex) {\n nextStatus = STATUS_REJECTED;\n nextValue = ex;\n }\n\n handler.nextPromise._updateStatus(nextStatus, nextValue);\n }\n\n this.running = false;\n },\n\n addUnhandledRejection: function addUnhandledRejection(promise) {\n this.unhandledRejections.push({\n promise: promise,\n time: Date.now()\n });\n this.scheduleRejectionCheck();\n },\n\n removeUnhandeledRejection: function removeUnhandeledRejection(promise) {\n promise._unhandledRejection = false;\n for (var i = 0; i < this.unhandledRejections.length; i++) {\n if (this.unhandledRejections[i].promise === promise) {\n this.unhandledRejections.splice(i);\n i--;\n }\n }\n },\n\n scheduleRejectionCheck: function scheduleRejectionCheck() {\n if (this.pendingRejectionCheck) {\n return;\n }\n this.pendingRejectionCheck = true;\n setTimeout(function rejectionCheck() {\n this.pendingRejectionCheck = false;\n var now = Date.now();\n for (var i = 0; i < this.unhandledRejections.length; i++) {\n if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {\n var unhandled = this.unhandledRejections[i].promise._value;\n var msg = 'Unhandled rejection: ' + unhandled;\n if (unhandled.stack) {\n msg += '\\n' + unhandled.stack;\n }\n warn(msg);\n this.unhandledRejections.splice(i);\n i--;\n }\n }\n if (this.unhandledRejections.length) {\n this.scheduleRejectionCheck();\n }\n }.bind(this), REJECTION_TIMEOUT);\n }\n };\n\n function Promise() {\n this._status = STATUS_PENDING;\n this._handlers = [];\n }\n /**\n * Builds a promise that is resolved when all the passed in promises are\n * resolved.\n * @param {array} array of data and/or promises to wait for.\n * @return {Promise} New dependant promise.\n */\n Promise.all = function Promise_all(promises) {\n var deferred = new Promise();\n var unresolved = promises.length;\n var results = [];\n if (unresolved === 0) {\n deferred.resolve(results);\n return deferred;\n }\n function reject(reason) {\n if (deferred._status === STATUS_REJECTED) {\n return;\n }\n results = [];\n deferred.reject(reason);\n }\n for (var i = 0, ii = promises.length; i < ii; ++i) {\n var promise = promises[i];\n var resolve = (function(i) {\n return function(value) {\n if (deferred._status === STATUS_REJECTED) {\n return;\n }\n results[i] = value;\n unresolved--;\n if (unresolved === 0)\n deferred.resolve(results);\n };\n })(i);\n if (Promise.isPromise(promise)) {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n return deferred;\n };\n\n /**\n * Checks if the value is likely a promise (has a 'then' function).\n * @return {boolean} true if x is thenable\n */\n Promise.isPromise = function Promise_isPromise(value) {\n return value && typeof value.then === 'function';\n };\n\n Promise.prototype = {\n _status: null,\n _value: null,\n _handlers: null,\n _unhandledRejection: null,\n\n _updateStatus: function Promise__updateStatus(status, value) {\n if (this._status === STATUS_RESOLVED ||\n this._status === STATUS_REJECTED) {\n return;\n }\n\n if (status == STATUS_RESOLVED &&\n Promise.isPromise(value)) {\n value.then(this._updateStatus.bind(this, STATUS_RESOLVED),\n this._updateStatus.bind(this, STATUS_REJECTED));\n return;\n }\n\n this._status = status;\n this._value = value;\n\n if (status === STATUS_REJECTED && this._handlers.length === 0) {\n this._unhandledRejection = true;\n HandlerManager.addUnhandledRejection(this);\n }\n\n HandlerManager.scheduleHandlers(this);\n },\n\n get isResolved() {\n return this._status === STATUS_RESOLVED;\n },\n\n get isRejected() {\n return this._status === STATUS_REJECTED;\n },\n\n resolve: function Promise_resolve(value) {\n this._updateStatus(STATUS_RESOLVED, value);\n },\n\n reject: function Promise_reject(reason) {\n this._updateStatus(STATUS_REJECTED, reason);\n },\n\n then: function Promise_then(onResolve, onReject) {\n var nextPromise = new Promise();\n this._handlers.push({\n thisPromise: this,\n onResolve: onResolve,\n onReject: onReject,\n nextPromise: nextPromise\n });\n HandlerManager.scheduleHandlers(this);\n return nextPromise;\n }\n };\n\n return Promise;\n})();\n\nvar StatTimer = (function StatTimerClosure() {\n function rpad(str, pad, length) {\n while (str.length < length)\n str += pad;\n return str;\n }\n function StatTimer() {\n this.started = {};\n this.times = [];\n this.enabled = true;\n }\n StatTimer.prototype = {\n time: function StatTimer_time(name) {\n if (!this.enabled)\n return;\n if (name in this.started)\n warn('Timer is already running for ' + name);\n this.started[name] = Date.now();\n },\n timeEnd: function StatTimer_timeEnd(name) {\n if (!this.enabled)\n return;\n if (!(name in this.started))\n warn('Timer has not been started for ' + name);\n this.times.push({\n 'name': name,\n 'start': this.started[name],\n 'end': Date.now()\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n },\n toString: function StatTimer_toString() {\n var times = this.times;\n var out = '';\n // Find the longest name for padding purposes.\n var longest = 0;\n for (var i = 0, ii = times.length; i < ii; ++i) {\n var name = times[i]['name'];\n if (name.length > longest)\n longest = name.length;\n }\n for (var i = 0, ii = times.length; i < ii; ++i) {\n var span = times[i];\n var duration = span.end - span.start;\n out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\\n';\n }\n return out;\n }\n };\n return StatTimer;\n})();\n\nPDFJS.createBlob = function createBlob(data, contentType) {\n if (typeof Blob !== 'undefined')\n return new Blob([data], { type: contentType });\n // Blob builder is deprecated in FF14 and removed in FF18.\n var bb = new MozBlobBuilder();\n bb.append(data);\n return bb.getBlob(contentType);\n};\n\nPDFJS.createObjectURL = (function createObjectURLClosure() {\n if (typeof URL !== 'undefined' && URL.createObjectURL) {\n return function createObjectURL(data, contentType) {\n var blob = PDFJS.createBlob(data, contentType);\n return URL.createObjectURL(blob);\n };\n }\n\n // Blob/createObjectURL is not available, falling back to data schema.\n var digits =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n return function createObjectURL(data, contentType) {\n var buffer = 'data:' + contentType + ';base64,';\n for (var i = 0, ii = data.length; i < ii; i += 3) {\n var b1 = data[i] & 0xFF;\n var b2 = data[i + 1] & 0xFF;\n var b3 = data[i + 2] & 0xFF;\n var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);\n var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;\n var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n }\n return buffer;\n };\n})();\n\nfunction MessageHandler(name, comObj) {\n this.name = name;\n this.comObj = comObj;\n this.callbackIndex = 1;\n this.postMessageTransfers = true;\n var callbacks = this.callbacks = {};\n var ah = this.actionHandler = {};\n\n ah['console_log'] = [function ahConsoleLog(data) {\n log.apply(null, data);\n }];\n // If there's no console available, console_error in the\n // action handler will do nothing.\n if ('console' in globalScope) {\n ah['console_error'] = [function ahConsoleError(data) {\n globalScope['console'].error.apply(null, data);\n }];\n } else {\n ah['console_error'] = [function ahConsoleError(data) {\n log.apply(null, data);\n }];\n }\n ah['_warn'] = [function ah_Warn(data) {\n warn(data);\n }];\n\n comObj.onmessage = function messageHandlerComObjOnMessage(event) {\n var data = event.data;\n if (data.isReply) {\n var callbackId = data.callbackId;\n if (data.callbackId in callbacks) {\n var callback = callbacks[callbackId];\n delete callbacks[callbackId];\n callback(data.data);\n } else {\n error('Cannot resolve callback ' + callbackId);\n }\n } else if (data.action in ah) {\n var action = ah[data.action];\n if (data.callbackId) {\n var promise = new Promise();\n promise.then(function(resolvedData) {\n comObj.postMessage({\n isReply: true,\n callbackId: data.callbackId,\n data: resolvedData\n });\n });\n action[0].call(action[1], data.data, promise);\n } else {\n action[0].call(action[1], data.data);\n }\n } else {\n error('Unkown action from worker: ' + data.action);\n }\n };\n}\n\nMessageHandler.prototype = {\n on: function messageHandlerOn(actionName, handler, scope) {\n var ah = this.actionHandler;\n if (ah[actionName]) {\n error('There is already an actionName called \"' + actionName + '\"');\n }\n ah[actionName] = [handler, scope];\n },\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * @param {String} actionName Action to call.\n * @param {JSON} data JSON data to send.\n * @param {function} [callback] Optional callback that will handle a reply.\n * @param {Array} [transfers] Optional list of transfers/ArrayBuffers\n */\n send: function messageHandlerSend(actionName, data, callback, transfers) {\n var message = {\n action: actionName,\n data: data\n };\n if (callback) {\n var callbackId = this.callbackIndex++;\n this.callbacks[callbackId] = callback;\n message.callbackId = callbackId;\n }\n if (transfers && this.postMessageTransfers) {\n this.comObj.postMessage(message, transfers);\n } else {\n this.comObj.postMessage(message);\n }\n }\n};\n\nfunction loadJpegStream(id, imageUrl, objs) {\n var img = new Image();\n img.onload = (function loadJpegStream_onloadClosure() {\n objs.resolve(id, img);\n });\n img.src = imageUrl;\n}\n\n\nvar ColorSpace = (function ColorSpaceClosure() {\n // Constructor should define this.numComps, this.defaultColor, this.name\n function ColorSpace() {\n error('should not call ColorSpace constructor');\n }\n\n ColorSpace.prototype = {\n /**\n * Converts the color value to the RGB color. The color components are\n * located in the src array starting from the srcOffset. Returns the array\n * of the rgb components, each value ranging from [0,255].\n */\n getRgb: function ColorSpace_getRgb(src, srcOffset) {\n error('Should not call ColorSpace.getRgb');\n },\n /**\n * Converts the color value to the RGB color, similar to the getRgb method.\n * The result placed into the dest array starting from the destOffset.\n */\n getRgbItem: function ColorSpace_getRgb(src, srcOffset, dest, destOffset) {\n error('Should not call ColorSpace.getRgbItem');\n },\n /**\n * Converts the specified number of the color values to the RGB colors.\n * The colors are located in the src array starting from the srcOffset.\n * The result is placed into the dest array starting from the destOffset.\n * The src array items shall be in [0,2^bits) range, the dest array items\n * will be in [0,255] range.\n */\n getRgbBuffer: function ColorSpace_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n error('Should not call ColorSpace.getRgbBuffer');\n },\n /**\n * Determines amount of the bytes is required to store the reslut of the\n * conversion that done by the getRgbBuffer method.\n */\n getOutputLength: function ColorSpace_getOutputLength(inputLength) {\n error('Should not call ColorSpace.getOutputLength');\n },\n /**\n * Returns true if source data will be equal the result/output data.\n */\n isPassthrough: function ColorSpace_isPassthrough(bits) {\n return false;\n },\n /**\n * Creates the output buffer and converts the specified number of the color\n * values to the RGB colors, similar to the getRgbBuffer.\n */\n createRgbBuffer: function ColorSpace_createRgbBuffer(src, srcOffset,\n count, bits) {\n if (this.isPassthrough(bits)) {\n return src.subarray(srcOffset);\n }\n var dest = new Uint8Array(count * 3);\n var numComponentColors = 1 << bits;\n // Optimization: create a color map when there is just one component and\n // we are converting more colors than the size of the color map. We\n // don't build the map if the colorspace is gray or rgb since those\n // methods are faster than building a map. This mainly offers big speed\n // ups for indexed and alternate colorspaces.\n if (this.numComps === 1 && count > numComponentColors &&\n this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {\n // TODO it may be worth while to cache the color map. While running\n // testing I never hit a cache so I will leave that out for now (perhaps\n // we are reparsing colorspaces too much?).\n var allColors = bits <= 8 ? new Uint8Array(numComponentColors) :\n new Uint16Array(numComponentColors);\n for (var i = 0; i < numComponentColors; i++) {\n allColors[i] = i;\n }\n var colorMap = new Uint8Array(numComponentColors * 3);\n this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bits);\n\n var destOffset = 0;\n for (var i = 0; i < count; ++i) {\n var key = src[srcOffset++] * 3;\n dest[destOffset++] = colorMap[key];\n dest[destOffset++] = colorMap[key + 1];\n dest[destOffset++] = colorMap[key + 2];\n }\n return dest;\n }\n this.getRgbBuffer(src, srcOffset, count, dest, 0, bits);\n return dest;\n },\n /**\n * True if the colorspace has components in the default range of [0, 1].\n * This should be true for all colorspaces except for lab color spaces\n * which are [0,100], [-128, 127], [-128, 127].\n */\n usesZeroToOneRange: true\n };\n\n ColorSpace.parse = function ColorSpace_parse(cs, xref, res) {\n var IR = ColorSpace.parseToIR(cs, xref, res);\n if (IR instanceof AlternateCS)\n return IR;\n\n return ColorSpace.fromIR(IR);\n };\n\n ColorSpace.fromIR = function ColorSpace_fromIR(IR) {\n var name = isArray(IR) ? IR[0] : IR;\n\n switch (name) {\n case 'DeviceGrayCS':\n return this.singletons.gray;\n case 'DeviceRgbCS':\n return this.singletons.rgb;\n case 'DeviceCmykCS':\n return this.singletons.cmyk;\n case 'CalGrayCS':\n var whitePoint = IR[1].WhitePoint;\n var blackPoint = IR[1].BlackPoint;\n var gamma = IR[1].Gamma;\n return new CalGrayCS(whitePoint, blackPoint, gamma);\n case 'PatternCS':\n var basePatternCS = IR[1];\n if (basePatternCS)\n basePatternCS = ColorSpace.fromIR(basePatternCS);\n return new PatternCS(basePatternCS);\n case 'IndexedCS':\n var baseIndexedCS = IR[1];\n var hiVal = IR[2];\n var lookup = IR[3];\n return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup);\n case 'AlternateCS':\n var numComps = IR[1];\n var alt = IR[2];\n var tintFnIR = IR[3];\n\n return new AlternateCS(numComps, ColorSpace.fromIR(alt),\n PDFFunction.fromIR(tintFnIR));\n case 'LabCS':\n var whitePoint = IR[1].WhitePoint;\n var blackPoint = IR[1].BlackPoint;\n var range = IR[1].Range;\n return new LabCS(whitePoint, blackPoint, range);\n default:\n error('Unkown name ' + name);\n }\n return null;\n };\n\n ColorSpace.parseToIR = function ColorSpace_parseToIR(cs, xref, res) {\n if (isName(cs)) {\n var colorSpaces = res.get('ColorSpace');\n if (isDict(colorSpaces)) {\n var refcs = colorSpaces.get(cs.name);\n if (refcs)\n cs = refcs;\n }\n }\n\n cs = xref.fetchIfRef(cs);\n var mode;\n\n if (isName(cs)) {\n mode = cs.name;\n this.mode = mode;\n\n switch (mode) {\n case 'DeviceGray':\n case 'G':\n return 'DeviceGrayCS';\n case 'DeviceRGB':\n case 'RGB':\n return 'DeviceRgbCS';\n case 'DeviceCMYK':\n case 'CMYK':\n return 'DeviceCmykCS';\n case 'Pattern':\n return ['PatternCS', null];\n default:\n error('unrecognized colorspace ' + mode);\n }\n } else if (isArray(cs)) {\n mode = cs[0].name;\n this.mode = mode;\n\n switch (mode) {\n case 'DeviceGray':\n case 'G':\n return 'DeviceGrayCS';\n case 'DeviceRGB':\n case 'RGB':\n return 'DeviceRgbCS';\n case 'DeviceCMYK':\n case 'CMYK':\n return 'DeviceCmykCS';\n case 'CalGray':\n var params = cs[1].getAll();\n return ['CalGrayCS', params];\n case 'CalRGB':\n return 'DeviceRgbCS';\n case 'ICCBased':\n var stream = xref.fetchIfRef(cs[1]);\n var dict = stream.dict;\n var numComps = dict.get('N');\n if (numComps == 1)\n return 'DeviceGrayCS';\n if (numComps == 3)\n return 'DeviceRgbCS';\n if (numComps == 4)\n return 'DeviceCmykCS';\n break;\n case 'Pattern':\n var basePatternCS = cs[1];\n if (basePatternCS)\n basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res);\n return ['PatternCS', basePatternCS];\n case 'Indexed':\n case 'I':\n var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res);\n var hiVal = cs[2] + 1;\n var lookup = xref.fetchIfRef(cs[3]);\n if (isStream(lookup)) {\n lookup = lookup.getBytes();\n }\n return ['IndexedCS', baseIndexedCS, hiVal, lookup];\n case 'Separation':\n case 'DeviceN':\n var name = cs[1];\n var numComps = 1;\n if (isName(name))\n numComps = 1;\n else if (isArray(name))\n numComps = name.length;\n var alt = ColorSpace.parseToIR(cs[2], xref, res);\n var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3]));\n return ['AlternateCS', numComps, alt, tintFnIR];\n case 'Lab':\n var params = cs[1].getAll();\n return ['LabCS', params];\n default:\n error('unimplemented color space object \"' + mode + '\"');\n }\n } else {\n error('unrecognized color space object: \"' + cs + '\"');\n }\n return null;\n };\n /**\n * Checks if a decode map matches the default decode map for a color space.\n * This handles the general decode maps where there are two values per\n * component. e.g. [0, 1, 0, 1, 0, 1] for a RGB color.\n * This does not handle Lab, Indexed, or Pattern decode maps since they are\n * slightly different.\n * @param {Array} decode Decode map (usually from an image).\n * @param {Number} n Number of components the color space has.\n */\n ColorSpace.isDefaultDecode = function ColorSpace_isDefaultDecode(decode, n) {\n if (!decode)\n return true;\n\n if (n * 2 !== decode.length) {\n warn('The decode map is not the correct length');\n return true;\n }\n for (var i = 0, ii = decode.length; i < ii; i += 2) {\n if (decode[i] !== 0 || decode[i + 1] != 1)\n return false;\n }\n return true;\n };\n\n ColorSpace.singletons = {\n get gray() {\n return shadow(this, 'gray', new DeviceGrayCS());\n },\n get rgb() {\n return shadow(this, 'rgb', new DeviceRgbCS());\n },\n get cmyk() {\n return shadow(this, 'cmyk', new DeviceCmykCS());\n }\n };\n\n return ColorSpace;\n})();\n\n/**\n * Alternate color space handles both Separation and DeviceN color spaces. A\n * Separation color space is actually just a DeviceN with one color component.\n * Both color spaces use a tinting function to convert colors to a base color\n * space.\n */\nvar AlternateCS = (function AlternateCSClosure() {\n function AlternateCS(numComps, base, tintFn) {\n this.name = 'Alternate';\n this.numComps = numComps;\n this.defaultColor = new Float32Array(numComps);\n for (var i = 0; i < numComps; ++i) {\n this.defaultColor[i] = 1;\n }\n this.base = base;\n this.tintFn = tintFn;\n }\n\n AlternateCS.prototype = {\n getRgb: function AlternateCS_getRgb(src, srcOffset) {\n var rgb = new Uint8Array(3);\n this.getRgbItem(src, srcOffset, rgb, 0);\n return rgb;\n },\n getRgbItem: function AlternateCS_getRgbItem(src, srcOffset,\n dest, destOffset) {\n var baseNumComps = this.base.numComps;\n var input = 'subarray' in src ?\n src.subarray(srcOffset, srcOffset + this.numComps) :\n Array.prototype.slice.call(src, srcOffset, srcOffset + this.numComps);\n var tinted = this.tintFn(input);\n this.base.getRgbItem(tinted, 0, dest, destOffset);\n },\n getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n var tintFn = this.tintFn;\n var base = this.base;\n var scale = 1 / ((1 << bits) - 1);\n var baseNumComps = base.numComps;\n var usesZeroToOneRange = base.usesZeroToOneRange;\n var isPassthrough = base.isPassthrough(8) || !usesZeroToOneRange;\n var pos = isPassthrough ? destOffset : 0;\n var baseBuf = isPassthrough ? dest : new Uint8Array(baseNumComps * count);\n var numComps = this.numComps;\n\n var scaled = new Float32Array(numComps);\n for (var i = 0; i < count; i++) {\n for (var j = 0; j < numComps; j++) {\n scaled[j] = src[srcOffset++] * scale;\n }\n var tinted = tintFn(scaled);\n if (usesZeroToOneRange) {\n for (var j = 0; j < baseNumComps; j++) {\n baseBuf[pos++] = tinted[j] * 255;\n }\n } else {\n base.getRgbItem(tinted, 0, baseBuf, pos);\n pos += baseNumComps;\n }\n }\n if (!isPassthrough) {\n base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8);\n }\n },\n getOutputLength: function AlternateCS_getOutputLength(inputLength) {\n return this.base.getOutputLength(inputLength *\n this.base.numComps / this.numComps);\n },\n isPassthrough: ColorSpace.prototype.isPassthrough,\n createRgbBuffer: ColorSpace.prototype.createRgbBuffer,\n isDefaultDecode: function AlternateCS_isDefaultDecode(decodeMap) {\n return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n },\n usesZeroToOneRange: true\n };\n\n return AlternateCS;\n})();\n\nvar PatternCS = (function PatternCSClosure() {\n function PatternCS(baseCS) {\n this.name = 'Pattern';\n this.base = baseCS;\n }\n PatternCS.prototype = {};\n\n return PatternCS;\n})();\n\nvar IndexedCS = (function IndexedCSClosure() {\n function IndexedCS(base, highVal, lookup) {\n this.name = 'Indexed';\n this.numComps = 1;\n this.defaultColor = new Uint8Array([0]);\n this.base = base;\n this.highVal = highVal;\n\n var baseNumComps = base.numComps;\n var length = baseNumComps * highVal;\n var lookupArray;\n\n if (isStream(lookup)) {\n lookupArray = new Uint8Array(length);\n var bytes = lookup.getBytes(length);\n lookupArray.set(bytes);\n } else if (isString(lookup)) {\n lookupArray = new Uint8Array(length);\n for (var i = 0; i < length; ++i)\n lookupArray[i] = lookup.charCodeAt(i);\n } else if (lookup instanceof Uint8Array || lookup instanceof Array) {\n lookupArray = lookup;\n } else {\n error('Unrecognized lookup table: ' + lookup);\n }\n this.lookup = lookupArray;\n }\n\n IndexedCS.prototype = {\n getRgb: function IndexedCS_getRgb(src, srcOffset) {\n var numComps = this.base.numComps;\n var start = src[srcOffset] * numComps;\n return this.base.getRgb(this.lookup, start);\n },\n getRgbItem: function IndexedCS_getRgbItem(src, srcOffset,\n dest, destOffset) {\n var numComps = this.base.numComps;\n var start = src[srcOffset] * numComps;\n this.base.getRgbItem(this.lookup, start, dest, destOffset);\n },\n getRgbBuffer: function IndexedCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset) {\n var base = this.base;\n var numComps = base.numComps;\n var outputDelta = base.getOutputLength(numComps);\n var lookup = this.lookup;\n\n for (var i = 0; i < count; ++i) {\n var lookupPos = src[srcOffset++] * numComps;\n base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8);\n destOffset += outputDelta;\n }\n },\n getOutputLength: function IndexedCS_getOutputLength(inputLength) {\n return this.base.getOutputLength(inputLength * this.base.numComps);\n },\n isPassthrough: ColorSpace.prototype.isPassthrough,\n createRgbBuffer: ColorSpace.prototype.createRgbBuffer,\n isDefaultDecode: function IndexedCS_isDefaultDecode(decodeMap) {\n // indexed color maps shouldn't be changed\n return true;\n },\n usesZeroToOneRange: true\n };\n return IndexedCS;\n})();\n\nvar DeviceGrayCS = (function DeviceGrayCSClosure() {\n function DeviceGrayCS() {\n this.name = 'DeviceGray';\n this.numComps = 1;\n this.defaultColor = new Float32Array([0]);\n }\n\n DeviceGrayCS.prototype = {\n getRgb: function DeviceGrayCS_getRgb(src, srcOffset) {\n var rgb = new Uint8Array(3);\n this.getRgbItem(src, srcOffset, rgb, 0);\n return rgb;\n },\n getRgbItem: function DeviceGrayCS_getRgbItem(src, srcOffset,\n dest, destOffset) {\n var c = (src[srcOffset] * 255) | 0;\n c = c < 0 ? 0 : c > 255 ? 255 : c;\n dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;\n },\n getRgbBuffer: function DeviceGrayCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n var scale = 255 / ((1 << bits) - 1);\n var j = srcOffset, q = destOffset;\n for (var i = 0; i < count; ++i) {\n var c = (scale * src[j++]) | 0;\n dest[q++] = c;\n dest[q++] = c;\n dest[q++] = c;\n }\n },\n getOutputLength: function DeviceGrayCS_getOutputLength(inputLength) {\n return inputLength * 3;\n },\n isPassthrough: ColorSpace.prototype.isPassthrough,\n createRgbBuffer: ColorSpace.prototype.createRgbBuffer,\n isDefaultDecode: function DeviceGrayCS_isDefaultDecode(decodeMap) {\n return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n },\n usesZeroToOneRange: true\n };\n return DeviceGrayCS;\n})();\n\nvar DeviceRgbCS = (function DeviceRgbCSClosure() {\n function DeviceRgbCS() {\n this.name = 'DeviceRGB';\n this.numComps = 3;\n this.defaultColor = new Float32Array([0, 0, 0]);\n }\n DeviceRgbCS.prototype = {\n getRgb: function DeviceRgbCS_getRgb(src, srcOffset) {\n var rgb = new Uint8Array(3);\n this.getRgbItem(src, srcOffset, rgb, 0);\n return rgb;\n },\n getRgbItem: function DeviceRgbCS_getRgbItem(src, srcOffset,\n dest, destOffset) {\n var r = (src[srcOffset] * 255) | 0;\n var g = (src[srcOffset + 1] * 255) | 0;\n var b = (src[srcOffset + 2] * 255) | 0;\n dest[destOffset] = r < 0 ? 0 : r > 255 ? 255 : r;\n dest[destOffset + 1] = g < 0 ? 0 : g > 255 ? 255 : g;\n dest[destOffset + 2] = b < 0 ? 0 : b > 255 ? 255 : b;\n },\n getRgbBuffer: function DeviceRgbCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n var length = count * 3;\n if (bits == 8) {\n dest.set(src.subarray(srcOffset, srcOffset + length), destOffset);\n return;\n }\n var scale = 255 / ((1 << bits) - 1);\n var j = srcOffset, q = destOffset;\n for (var i = 0; i < length; ++i) {\n dest[q++] = (scale * src[j++]) | 0;\n }\n },\n getOutputLength: function DeviceRgbCS_getOutputLength(inputLength) {\n return inputLength;\n },\n isPassthrough: function DeviceRgbCS_isPassthrough(bits) {\n return bits == 8;\n },\n createRgbBuffer: ColorSpace.prototype.createRgbBuffer,\n isDefaultDecode: function DeviceRgbCS_isDefaultDecode(decodeMap) {\n return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n },\n usesZeroToOneRange: true\n };\n return DeviceRgbCS;\n})();\n\nvar DeviceCmykCS = (function DeviceCmykCSClosure() {\n // The coefficients below was found using numerical analysis: the method of\n // steepest descent for the sum((f_i - color_value_i)^2) for r/g/b colors,\n // where color_value is the tabular value from the table of sampled RGB colors\n // from CMYK US Web Coated (SWOP) colorspace, and f_i is the corresponding\n // CMYK color conversion using the estimation below:\n // f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255\n function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {\n var c = src[srcOffset + 0] * srcScale;\n var m = src[srcOffset + 1] * srcScale;\n var y = src[srcOffset + 2] * srcScale;\n var k = src[srcOffset + 3] * srcScale;\n\n var r =\n c * (-4.387332384609988 * c + 54.48615194189176 * m +\n 18.82290502165302 * y + 212.25662451639585 * k +\n -285.2331026137004) +\n m * (1.7149763477362134 * m - 5.6096736904047315 * y +\n -17.873870861415444 * k - 5.497006427196366) +\n y * (-2.5217340131683033 * y - 21.248923337353073 * k +\n 17.5119270841813) +\n k * (-21.86122147463605 * k - 189.48180835922747) + 255;\n var g =\n c * (8.841041422036149 * c + 60.118027045597366 * m +\n 6.871425592049007 * y + 31.159100130055922 * k +\n -79.2970844816548) +\n m * (-15.310361306967817 * m + 17.575251261109482 * y +\n 131.35250912493976 * k - 190.9453302588951) +\n y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) +\n k * (-20.737325471181034 * k - 187.80453709719578) + 255;\n var b =\n c * (0.8842522430003296 * c + 8.078677503112928 * m +\n 30.89978309703729 * y - 0.23883238689178934 * k +\n -14.183576799673286) +\n m * (10.49593273432072 * m + 63.02378494754052 * y +\n 50.606957656360734 * k - 112.23884253719248) +\n y * (0.03296041114873217 * y + 115.60384449646641 * k +\n -193.58209356861505) +\n k * (-22.33816807309886 * k - 180.12613974708367) + 255;\n\n dest[destOffset] = r > 255 ? 255 : r < 0 ? 0 : r;\n dest[destOffset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;\n dest[destOffset + 2] = b > 255 ? 255 : b < 0 ? 0 : b;\n }\n\n function DeviceCmykCS() {\n this.name = 'DeviceCMYK';\n this.numComps = 4;\n this.defaultColor = new Float32Array([0, 0, 0, 1]);\n }\n DeviceCmykCS.prototype = {\n getRgb: function DeviceCmykCS_getRgb(src, srcOffset) {\n var rgb = new Uint8Array(3);\n convertToRgb(src, srcOffset, 1, rgb, 0);\n return rgb;\n },\n getRgbItem: function DeviceCmykCS_getRgbItem(src, srcOffset,\n dest, destOffset) {\n convertToRgb(src, srcOffset, 1, dest, destOffset);\n },\n getRgbBuffer: function DeviceCmykCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n var scale = 1 / ((1 << bits) - 1);\n for (var i = 0; i < count; i++) {\n convertToRgb(src, srcOffset, scale, dest, destOffset);\n srcOffset += 4;\n destOffset += 3;\n }\n },\n getOutputLength: function DeviceCmykCS_getOutputLength(inputLength) {\n return (inputLength >> 2) * 3;\n },\n isPassthrough: ColorSpace.prototype.isPassthrough,\n createRgbBuffer: ColorSpace.prototype.createRgbBuffer,\n isDefaultDecode: function DeviceCmykCS_isDefaultDecode(decodeMap) {\n return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n },\n usesZeroToOneRange: true\n };\n\n return DeviceCmykCS;\n})();\n\n//\n// CalGrayCS: Based on \"PDF Reference, Sixth Ed\", p.245\n//\nvar CalGrayCS = (function CalGrayCSClosure() {\n function CalGrayCS(whitePoint, blackPoint, gamma) {\n this.name = 'CalGray';\n this.numComps = 3;\n this.defaultColor = new Float32Array([0, 0, 0]);\n\n if (!whitePoint) {\n error('WhitePoint missing - required for color space CalGray');\n }\n blackPoint = blackPoint || [0, 0, 0];\n gamma = gamma || 1;\n\n // Translate arguments to spec variables.\n this.XW = whitePoint[0];\n this.YW = whitePoint[1];\n this.ZW = whitePoint[2];\n\n this.XB = blackPoint[0];\n this.YB = blackPoint[1];\n this.ZB = blackPoint[2];\n\n this.G = gamma;\n\n // Validate variables as per spec.\n if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n error('Invalid WhitePoint components for ' + this.name +\n ', no fallback available');\n }\n\n if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n info('Invalid BlackPoint for ' + this.name + ', falling back to default');\n this.XB = this.YB = this.ZB = 0;\n }\n\n if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {\n TODO(this.name + ', BlackPoint: XB: ' + this.XB + ', YB: ' + this.YB +\n ', ZB: ' + this.ZB + ', only default values are supported.');\n }\n\n if (this.G < 1) {\n info('Invalid Gamma: ' + this.G + ' for ' + this.name +\n ', falling back to default');\n this.G = 1;\n }\n }\n\n CalGrayCS.prototype = {\n getRgb: function CalGrayCS_getRgb(src, srcOffset) {\n var rgb = new Uint8Array(3);\n this.getRgbItem(src, srcOffset, rgb, 0);\n return rgb;\n },\n getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset,\n dest, destOffset) {\n // A represents a gray component of a calibrated gray space.\n // A <---> AG in the spec\n var A = src[srcOffset];\n var AG = Math.pow(A, this.G);\n\n // Computes intermediate variables M, L, N as per spec.\n // Except if other than default BlackPoint values are used.\n var M = this.XW * AG;\n var L = this.YW * AG;\n var N = this.ZW * AG;\n\n // Decode XYZ, as per spec.\n var X = M;\n var Y = L;\n var Z = N;\n\n // http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4.\n // This yields values in range [0, 100].\n var Lstar = Math.max(116 * Math.pow(Y, 1 / 3) - 16, 0);\n\n // Convert values to rgb range [0, 255].\n dest[destOffset] = Lstar * 255 / 100;\n dest[destOffset + 1] = Lstar * 255 / 100;\n dest[destOffset + 2] = Lstar * 255 / 100;\n },\n getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n // TODO: This part is copied from DeviceGray. Make this utility function.\n var scale = 255 / ((1 << bits) - 1);\n var j = srcOffset, q = destOffset;\n for (var i = 0; i < count; ++i) {\n var c = (scale * src[j++]) | 0;\n dest[q++] = c;\n dest[q++] = c;\n dest[q++] = c;\n }\n },\n getOutputLength: function CalGrayCS_getOutputLength(inputLength) {\n return inputLength * 3;\n },\n isPassthrough: ColorSpace.prototype.isPassthrough,\n createRgbBuffer: ColorSpace.prototype.createRgbBuffer,\n isDefaultDecode: function CalGrayCS_isDefaultDecode(decodeMap) {\n return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n },\n usesZeroToOneRange: true\n };\n return CalGrayCS;\n})();\n\n//\n// LabCS: Based on \"PDF Reference, Sixth Ed\", p.250\n//\nvar LabCS = (function LabCSClosure() {\n function LabCS(whitePoint, blackPoint, range) {\n this.name = 'Lab';\n this.numComps = 3;\n this.defaultColor = new Float32Array([0, 0, 0]);\n\n if (!whitePoint)\n error('WhitePoint missing - required for color space Lab');\n blackPoint = blackPoint || [0, 0, 0];\n range = range || [-100, 100, -100, 100];\n\n // Translate args to spec variables\n this.XW = whitePoint[0];\n this.YW = whitePoint[1];\n this.ZW = whitePoint[2];\n this.amin = range[0];\n this.amax = range[1];\n this.bmin = range[2];\n this.bmax = range[3];\n\n // These are here just for completeness - the spec doesn't offer any\n // formulas that use BlackPoint in Lab\n this.XB = blackPoint[0];\n this.YB = blackPoint[1];\n this.ZB = blackPoint[2];\n\n // Validate vars as per spec\n if (this.XW < 0 || this.ZW < 0 || this.YW !== 1)\n error('Invalid WhitePoint components, no fallback available');\n\n if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n info('Invalid BlackPoint, falling back to default');\n this.XB = this.YB = this.ZB = 0;\n }\n\n if (this.amin > this.amax || this.bmin > this.bmax) {\n info('Invalid Range, falling back to defaults');\n this.amin = -100;\n this.amax = 100;\n this.bmin = -100;\n this.bmax = 100;\n }\n }\n\n // Function g(x) from spec\n function fn_g(x) {\n if (x >= 6 / 29)\n return x * x * x;\n else\n return (108 / 841) * (x - 4 / 29);\n }\n\n function decode(value, high1, low2, high2) {\n return low2 + (value) * (high2 - low2) / (high1);\n }\n\n // If decoding is needed maxVal should be 2^bits per component - 1.\n function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {\n // XXX: Lab input is in the range of [0, 100], [amin, amax], [bmin, bmax]\n // not the usual [0, 1]. If a command like setFillColor is used the src\n // values will already be within the correct range. However, if we are\n // converting an image we have to map the values to the correct range given\n // above.\n // Ls,as,bs <---> L*,a*,b* in the spec\n var Ls = src[srcOffset];\n var as = src[srcOffset + 1];\n var bs = src[srcOffset + 2];\n if (maxVal !== false) {\n Ls = decode(Ls, maxVal, 0, 100);\n as = decode(as, maxVal, cs.amin, cs.amax);\n bs = decode(bs, maxVal, cs.bmin, cs.bmax);\n }\n\n // Adjust limits of 'as' and 'bs'\n as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as;\n bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;\n\n // Computes intermediate variables X,Y,Z as per spec\n var M = (Ls + 16) / 116;\n var L = M + (as / 500);\n var N = M - (bs / 200);\n\n var X = cs.XW * fn_g(L);\n var Y = cs.YW * fn_g(M);\n var Z = cs.ZW * fn_g(N);\n\n var r, g, b;\n // Using different conversions for D50 and D65 white points,\n // per http://www.color.org/srgb.pdf\n if (cs.ZW < 1) {\n // Assuming D50 (X=0.9642, Y=1.00, Z=0.8249)\n r = X * 3.1339 + Y * -1.6170 + Z * -0.4906;\n g = X * -0.9785 + Y * 1.9160 + Z * 0.0333;\n b = X * 0.0720 + Y * -0.2290 + Z * 1.4057;\n } else {\n // Assuming D65 (X=0.9505, Y=1.00, Z=1.0888)\n r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;\n g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;\n b = X * 0.0557 + Y * -0.2040 + Z * 1.0570;\n }\n // clamp color values to [0,1] range then convert to [0,255] range.\n dest[destOffset] = Math.sqrt(r < 0 ? 0 : r > 1 ? 1 : r) * 255;\n dest[destOffset + 1] = Math.sqrt(g < 0 ? 0 : g > 1 ? 1 : g) * 255;\n dest[destOffset + 2] = Math.sqrt(b < 0 ? 0 : b > 1 ? 1 : b) * 255;\n }\n\n LabCS.prototype = {\n getRgb: function LabCS_getRgb(src, srcOffset) {\n var rgb = new Uint8Array(3);\n convertToRgb(this, src, srcOffset, false, rgb, 0);\n return rgb;\n },\n getRgbItem: function LabCS_getRgbItem(src, srcOffset, dest, destOffset) {\n convertToRgb(this, src, srcOffset, false, dest, destOffset);\n },\n getRgbBuffer: function LabCS_getRgbBuffer(src, srcOffset, count,\n dest, destOffset, bits) {\n var maxVal = (1 << bits) - 1;\n for (var i = 0; i < count; i++) {\n convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);\n srcOffset += 3;\n destOffset += 3;\n }\n },\n getOutputLength: function LabCS_getOutputLength(inputLength) {\n return inputLength;\n },\n isPassthrough: ColorSpace.prototype.isPassthrough,\n isDefaultDecode: function LabCS_isDefaultDecode(decodeMap) {\n // XXX: Decoding is handled with the lab conversion because of the strange\n // ranges that are used.\n return true;\n },\n usesZeroToOneRange: false\n };\n return LabCS;\n})();\n\n\n\nvar PatternType = {\n AXIAL: 2,\n RADIAL: 3\n};\n\nvar Pattern = (function PatternClosure() {\n // Constructor should define this.getPattern\n function Pattern() {\n error('should not call Pattern constructor');\n }\n\n Pattern.prototype = {\n // Input: current Canvas context\n // Output: the appropriate fillStyle or strokeStyle\n getPattern: function Pattern_getPattern(ctx) {\n error('Should not call Pattern.getStyle: ' + ctx);\n }\n };\n\n Pattern.shadingFromIR = function Pattern_shadingFromIR(raw) {\n return Shadings[raw[0]].fromIR(raw);\n };\n\n Pattern.parseShading = function Pattern_parseShading(shading, matrix, xref,\n res) {\n\n var dict = isStream(shading) ? shading.dict : shading;\n var type = dict.get('ShadingType');\n\n switch (type) {\n case PatternType.AXIAL:\n case PatternType.RADIAL:\n // Both radial and axial shadings are handled by RadialAxial shading.\n return new Shadings.RadialAxial(dict, matrix, xref, res);\n default:\n TODO('Unsupported shading type: ' + type);\n return new Shadings.Dummy();\n }\n };\n return Pattern;\n})();\n\nvar Shadings = {};\n\n// A small number to offset the first/last color stops so we can insert ones to\n// support extend. Number.MIN_VALUE appears to be too small and breaks the\n// extend. 1e-7 works in FF but chrome seems to use an even smaller sized number\n// internally so we have to go bigger.\nShadings.SMALL_NUMBER = 1e-2;\n\n// Radial and axial shading have very similar implementations\n// If needed, the implementations can be broken into two classes\nShadings.RadialAxial = (function RadialAxialClosure() {\n function RadialAxial(dict, matrix, xref, res, ctx) {\n this.matrix = matrix;\n this.coordsArr = dict.get('Coords');\n this.shadingType = dict.get('ShadingType');\n this.type = 'Pattern';\n this.ctx = ctx;\n var cs = dict.get('ColorSpace', 'CS');\n cs = ColorSpace.parse(cs, xref, res);\n this.cs = cs;\n\n var t0 = 0.0, t1 = 1.0;\n if (dict.has('Domain')) {\n var domainArr = dict.get('Domain');\n t0 = domainArr[0];\n t1 = domainArr[1];\n }\n\n var extendStart = false, extendEnd = false;\n if (dict.has('Extend')) {\n var extendArr = dict.get('Extend');\n extendStart = extendArr[0];\n extendEnd = extendArr[1];\n }\n\n if (this.shadingType === PatternType.RADIAL &&\n (!extendStart || !extendEnd)) {\n // Radial gradient only currently works if either circle is fully within\n // the other circle.\n var x1 = this.coordsArr[0];\n var y1 = this.coordsArr[1];\n var r1 = this.coordsArr[2];\n var x2 = this.coordsArr[3];\n var y2 = this.coordsArr[4];\n var r2 = this.coordsArr[5];\n var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\n if (r1 <= r2 + distance &&\n r2 <= r1 + distance) {\n warn('Unsupported radial gradient.');\n }\n }\n\n this.extendStart = extendStart;\n this.extendEnd = extendEnd;\n\n var fnObj = dict.get('Function');\n var fn;\n if (isArray(fnObj)) {\n var fnArray = [];\n for (var j = 0, jj = fnObj.length; j < jj; j++) {\n var obj = xref.fetchIfRef(fnObj[j]);\n if (!isPDFFunction(obj)) {\n error('Invalid function');\n }\n fnArray.push(PDFFunction.parse(xref, obj));\n }\n fn = function radialAxialColorFunction(arg) {\n var out = [];\n for (var i = 0, ii = fnArray.length; i < ii; i++) {\n out.push(fnArray[i](arg)[0]);\n }\n return out;\n };\n } else {\n if (!isPDFFunction(fnObj)) {\n error('Invalid function');\n }\n fn = PDFFunction.parse(xref, fnObj);\n }\n\n // 10 samples seems good enough for now, but probably won't work\n // if there are sharp color changes. Ideally, we would implement\n // the spec faithfully and add lossless optimizations.\n var diff = t1 - t0;\n var step = diff / 10;\n\n var colorStops = this.colorStops = [];\n\n // Protect against bad domains so we don't end up in an infinte loop below.\n if (t0 >= t1 || step <= 0) {\n // Acrobat doesn't seem to handle these cases so we'll ignore for\n // now.\n info('Bad shading domain.');\n return;\n }\n\n for (var i = t0; i <= t1; i += step) {\n var rgbColor = cs.getRgb(fn([i]), 0);\n var cssColor = Util.makeCssRgb(rgbColor);\n colorStops.push([(i - t0) / diff, cssColor]);\n }\n\n var background = 'transparent';\n if (dict.has('Background')) {\n var rgbColor = cs.getRgb(dict.get('Background'), 0);\n background = Util.makeCssRgb(rgbColor);\n }\n\n if (!extendStart) {\n // Insert a color stop at the front and offset the first real color stop\n // so it doesn't conflict with the one we insert.\n colorStops.unshift([0, background]);\n colorStops[1][0] += Shadings.SMALL_NUMBER;\n }\n if (!extendEnd) {\n // Same idea as above in extendStart but for the end.\n colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;\n colorStops.push([1, background]);\n }\n\n this.colorStops = colorStops;\n }\n\n RadialAxial.fromIR = function RadialAxial_fromIR(raw) {\n var type = raw[1];\n var colorStops = raw[2];\n var p0 = raw[3];\n var p1 = raw[4];\n var r0 = raw[5];\n var r1 = raw[6];\n return {\n type: 'Pattern',\n getPattern: function RadialAxial_getPattern(ctx) {\n var grad;\n if (type == PatternType.AXIAL)\n grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);\n else if (type == PatternType.RADIAL)\n grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);\n\n for (var i = 0, ii = colorStops.length; i < ii; ++i) {\n var c = colorStops[i];\n grad.addColorStop(c[0], c[1]);\n }\n return grad;\n }\n };\n };\n\n RadialAxial.prototype = {\n getIR: function RadialAxial_getIR() {\n var coordsArr = this.coordsArr;\n var type = this.shadingType;\n if (type == PatternType.AXIAL) {\n var p0 = [coordsArr[0], coordsArr[1]];\n var p1 = [coordsArr[2], coordsArr[3]];\n var r0 = null;\n var r1 = null;\n } else if (type == PatternType.RADIAL) {\n var p0 = [coordsArr[0], coordsArr[1]];\n var p1 = [coordsArr[3], coordsArr[4]];\n var r0 = coordsArr[2];\n var r1 = coordsArr[5];\n } else {\n error('getPattern type unknown: ' + type);\n }\n\n var matrix = this.matrix;\n if (matrix) {\n p0 = Util.applyTransform(p0, matrix);\n p1 = Util.applyTransform(p1, matrix);\n }\n\n return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1];\n }\n };\n\n return RadialAxial;\n})();\n\nShadings.Dummy = (function DummyClosure() {\n function Dummy() {\n this.type = 'Pattern';\n }\n\n Dummy.fromIR = function Dummy_fromIR() {\n return {\n type: 'Pattern',\n getPattern: function Dummy_fromIR_getPattern() {\n return 'hotpink';\n }\n };\n };\n\n Dummy.prototype = {\n getIR: function Dummy_getIR() {\n return ['Dummy'];\n }\n };\n return Dummy;\n})();\n\nvar TilingPattern = (function TilingPatternClosure() {\n var PaintType = {\n COLORED: 1,\n UNCOLORED: 2\n };\n\n var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n\n function TilingPattern(IR, color, ctx, objs, commonObjs, baseTransform) {\n this.name = IR[1][0].name;\n this.operatorList = IR[2];\n this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];\n this.bbox = IR[4];\n this.xstep = IR[5];\n this.ystep = IR[6];\n this.paintType = IR[7];\n this.tilingType = IR[8];\n this.color = color;\n this.objs = objs;\n this.commonObjs = commonObjs;\n this.baseTransform = baseTransform;\n this.type = 'Pattern';\n this.ctx = ctx;\n }\n\n TilingPattern.getIR = function TilingPattern_getIR(operatorList, dict, args) {\n var matrix = dict.get('Matrix');\n var bbox = dict.get('BBox');\n var xstep = dict.get('XStep');\n var ystep = dict.get('YStep');\n var paintType = dict.get('PaintType');\n var tilingType = dict.get('TilingType');\n\n return [\n 'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep,\n paintType, tilingType\n ];\n };\n\n TilingPattern.prototype = {\n createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {\n var operatorList = this.operatorList;\n var bbox = this.bbox;\n var xstep = this.xstep;\n var ystep = this.ystep;\n var paintType = this.paintType;\n var tilingType = this.tilingType;\n var color = this.color;\n var objs = this.objs;\n var commonObjs = this.commonObjs;\n var ctx = this.ctx;\n\n TODO('TilingType: ' + tilingType);\n\n var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3];\n\n var topLeft = [x0, y0];\n // we want the canvas to be as large as the step size\n var botRight = [x0 + xstep, y0 + ystep];\n\n var width = botRight[0] - topLeft[0];\n var height = botRight[1] - topLeft[1];\n\n // Obtain scale from matrix and current transformation matrix.\n var matrixScale = Util.singularValueDecompose2dScale(this.matrix);\n var curMatrixScale = Util.singularValueDecompose2dScale(\n this.baseTransform);\n var combinedScale = [matrixScale[0] * curMatrixScale[0],\n matrixScale[1] * curMatrixScale[1]];\n\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n // Use width and height values that are as close as possible to the end\n // result when the pattern is used. Too low value makes the pattern look\n // blurry. Too large value makes it look too crispy.\n width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])),\n MAX_PATTERN_SIZE);\n\n height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])),\n MAX_PATTERN_SIZE);\n\n var tmpCanvas = CachedCanvases.getCanvas('pattern', width, height, true);\n var tmpCtx = tmpCanvas.context;\n var graphics = new CanvasGraphics(tmpCtx, commonObjs, objs);\n graphics.groupLevel = owner.groupLevel;\n\n this.setFillAndStrokeStyleToContext(tmpCtx, paintType, color);\n\n this.setScale(width, height, xstep, ystep);\n this.transformToScale(graphics);\n\n // transform coordinates to pattern space\n var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];\n graphics.transform.apply(graphics, tmpTranslate);\n\n this.clipBbox(graphics, bbox, x0, y0, x1, y1);\n\n graphics.executeOperatorList(operatorList);\n return tmpCanvas.canvas;\n },\n\n setScale: function TilingPattern_setScale(width, height, xstep, ystep) {\n this.scale = [width / xstep, height / ystep];\n },\n\n transformToScale: function TilingPattern_transformToScale(graphics) {\n var scale = this.scale;\n var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];\n graphics.transform.apply(graphics, tmpScale);\n },\n\n scaleToContext: function TilingPattern_scaleToContext() {\n var scale = this.scale;\n this.ctx.scale(1 / scale[0], 1 / scale[1]);\n },\n\n clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {\n if (bbox && isArray(bbox) && 4 == bbox.length) {\n var bboxWidth = x1 - x0;\n var bboxHeight = y1 - y0;\n graphics.rectangle(x0, y0, bboxWidth, bboxHeight);\n graphics.clip();\n graphics.endPath();\n }\n },\n\n setFillAndStrokeStyleToContext:\n function setFillAndStrokeStyleToContext(context, paintType, color) {\n switch (paintType) {\n case PaintType.COLORED:\n var ctx = this.ctx;\n context.fillStyle = ctx.fillStyle;\n context.strokeStyle = ctx.strokeStyle;\n break;\n case PaintType.UNCOLORED:\n var rgbColor = ColorSpace.singletons.rgb.getRgb(color, 0);\n var cssColor = Util.makeCssRgb(rgbColor);\n context.fillStyle = cssColor;\n context.strokeStyle = cssColor;\n break;\n default:\n error('Unsupported paint type: ' + paintType);\n }\n },\n\n getPattern: function TilingPattern_getPattern(ctx, owner) {\n var temporaryPatternCanvas = this.createPatternCanvas(owner);\n\n var ctx = this.ctx;\n ctx.setTransform.apply(ctx, this.baseTransform);\n ctx.transform.apply(ctx, this.matrix);\n this.scaleToContext();\n\n return ctx.createPattern(temporaryPatternCanvas, 'repeat');\n }\n };\n\n return TilingPattern;\n})();\n\n\n\nvar PDFFunction = (function PDFFunctionClosure() {\n var CONSTRUCT_SAMPLED = 0;\n var CONSTRUCT_INTERPOLATED = 2;\n var CONSTRUCT_STICHED = 3;\n var CONSTRUCT_POSTSCRIPT = 4;\n\n return {\n getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps,\n str) {\n var length = 1;\n for (var i = 0, ii = size.length; i < ii; i++)\n length *= size[i];\n length *= outputSize;\n\n var array = [];\n var codeSize = 0;\n var codeBuf = 0;\n // 32 is a valid bps so shifting won't work\n var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1);\n\n var strBytes = str.getBytes((length * bps + 7) / 8);\n var strIdx = 0;\n for (var i = 0; i < length; i++) {\n while (codeSize < bps) {\n codeBuf <<= 8;\n codeBuf |= strBytes[strIdx++];\n codeSize += 8;\n }\n codeSize -= bps;\n array.push((codeBuf >> codeSize) * sampleMul);\n codeBuf &= (1 << codeSize) - 1;\n }\n return array;\n },\n\n getIR: function PDFFunction_getIR(xref, fn) {\n var dict = fn.dict;\n if (!dict)\n dict = fn;\n\n var types = [this.constructSampled,\n null,\n this.constructInterpolated,\n this.constructStiched,\n this.constructPostScript];\n\n var typeNum = dict.get('FunctionType');\n var typeFn = types[typeNum];\n if (!typeFn)\n error('Unknown type of function');\n\n return typeFn.call(this, fn, dict, xref);\n },\n\n fromIR: function PDFFunction_fromIR(IR) {\n var type = IR[0];\n switch (type) {\n case CONSTRUCT_SAMPLED:\n return this.constructSampledFromIR(IR);\n case CONSTRUCT_INTERPOLATED:\n return this.constructInterpolatedFromIR(IR);\n case CONSTRUCT_STICHED:\n return this.constructStichedFromIR(IR);\n //case CONSTRUCT_POSTSCRIPT:\n default:\n return this.constructPostScriptFromIR(IR);\n }\n },\n\n parse: function PDFFunction_parse(xref, fn) {\n var IR = this.getIR(xref, fn);\n return this.fromIR(IR);\n },\n\n constructSampled: function PDFFunction_constructSampled(str, dict) {\n function toMultiArray(arr) {\n var inputLength = arr.length;\n var outputLength = arr.length / 2;\n var out = [];\n var index = 0;\n for (var i = 0; i < inputLength; i += 2) {\n out[index] = [arr[i], arr[i + 1]];\n ++index;\n }\n return out;\n }\n var domain = dict.get('Domain');\n var range = dict.get('Range');\n\n if (!domain || !range)\n error('No domain or range');\n\n var inputSize = domain.length / 2;\n var outputSize = range.length / 2;\n\n domain = toMultiArray(domain);\n range = toMultiArray(range);\n\n var size = dict.get('Size');\n var bps = dict.get('BitsPerSample');\n var order = dict.get('Order') || 1;\n if (order !== 1) {\n // No description how cubic spline interpolation works in PDF32000:2008\n // As in poppler, ignoring order, linear interpolation may work as good\n TODO('No support for cubic spline interpolation: ' + order);\n }\n\n var encode = dict.get('Encode');\n if (!encode) {\n encode = [];\n for (var i = 0; i < inputSize; ++i) {\n encode.push(0);\n encode.push(size[i] - 1);\n }\n }\n encode = toMultiArray(encode);\n\n var decode = dict.get('Decode');\n if (!decode)\n decode = range;\n else\n decode = toMultiArray(decode);\n\n var samples = this.getSampleArray(size, outputSize, bps, str);\n\n return [\n CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size,\n outputSize, Math.pow(2, bps) - 1, range\n ];\n },\n\n constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) {\n // See chapter 3, page 109 of the PDF reference\n function interpolate(x, xmin, xmax, ymin, ymax) {\n return ymin + ((x - xmin) * ((ymax - ymin) / (xmax - xmin)));\n }\n\n return function constructSampledFromIRResult(args) {\n // See chapter 3, page 110 of the PDF reference.\n var m = IR[1];\n var domain = IR[2];\n var encode = IR[3];\n var decode = IR[4];\n var samples = IR[5];\n var size = IR[6];\n var n = IR[7];\n var mask = IR[8];\n var range = IR[9];\n\n if (m != args.length)\n error('Incorrect number of arguments: ' + m + ' != ' +\n args.length);\n\n var x = args;\n\n // Building the cube vertices: its part and sample index\n // http://rjwagner49.com/Mathematics/Interpolation.pdf\n var cubeVertices = 1 << m;\n var cubeN = new Float64Array(cubeVertices);\n var cubeVertex = new Uint32Array(cubeVertices);\n for (var j = 0; j < cubeVertices; j++)\n cubeN[j] = 1;\n\n var k = n, pos = 1;\n // Map x_i to y_j for 0 <= i < m using the sampled function.\n for (var i = 0; i < m; ++i) {\n // x_i' = min(max(x_i, Domain_2i), Domain_2i+1)\n var domain_2i = domain[i][0];\n var domain_2i_1 = domain[i][1];\n var xi = Math.min(Math.max(x[i], domain_2i), domain_2i_1);\n\n // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1,\n // Encode_2i, Encode_2i+1)\n var e = interpolate(xi, domain_2i, domain_2i_1,\n encode[i][0], encode[i][1]);\n\n // e_i' = min(max(e_i, 0), Size_i - 1)\n var size_i = size[i];\n e = Math.min(Math.max(e, 0), size_i - 1);\n\n // Adjusting the cube: N and vertex sample index\n var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1;\n var n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0);\n var n1 = e - e0; // (e - e0) / (e1 - e0);\n var offset0 = e0 * k;\n var offset1 = offset0 + k; // e1 * k\n for (var j = 0; j < cubeVertices; j++) {\n if (j & pos) {\n cubeN[j] *= n1;\n cubeVertex[j] += offset1;\n } else {\n cubeN[j] *= n0;\n cubeVertex[j] += offset0;\n }\n }\n\n k *= size_i;\n pos <<= 1;\n }\n\n var y = new Float64Array(n);\n for (var j = 0; j < n; ++j) {\n // Sum all cube vertices' samples portions\n var rj = 0;\n for (var i = 0; i < cubeVertices; i++)\n rj += samples[cubeVertex[i] + j] * cubeN[i];\n\n // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1,\n // Decode_2j, Decode_2j+1)\n rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);\n\n // y_j = min(max(r_j, range_2j), range_2j+1)\n y[j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);\n }\n\n return y;\n };\n },\n\n constructInterpolated: function PDFFunction_constructInterpolated(str,\n dict) {\n var c0 = dict.get('C0') || [0];\n var c1 = dict.get('C1') || [1];\n var n = dict.get('N');\n\n if (!isArray(c0) || !isArray(c1))\n error('Illegal dictionary for interpolated function');\n\n var length = c0.length;\n var diff = [];\n for (var i = 0; i < length; ++i)\n diff.push(c1[i] - c0[i]);\n\n return [CONSTRUCT_INTERPOLATED, c0, diff, n];\n },\n\n constructInterpolatedFromIR:\n function PDFFunction_constructInterpolatedFromIR(IR) {\n var c0 = IR[1];\n var diff = IR[2];\n var n = IR[3];\n\n var length = diff.length;\n\n return function constructInterpolatedFromIRResult(args) {\n var x = n == 1 ? args[0] : Math.pow(args[0], n);\n\n var out = [];\n for (var j = 0; j < length; ++j)\n out.push(c0[j] + (x * diff[j]));\n\n return out;\n\n };\n },\n\n constructStiched: function PDFFunction_constructStiched(fn, dict, xref) {\n var domain = dict.get('Domain');\n\n if (!domain)\n error('No domain');\n\n var inputSize = domain.length / 2;\n if (inputSize != 1)\n error('Bad domain for stiched function');\n\n var fnRefs = dict.get('Functions');\n var fns = [];\n for (var i = 0, ii = fnRefs.length; i < ii; ++i)\n fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i])));\n\n var bounds = dict.get('Bounds');\n var encode = dict.get('Encode');\n\n return [CONSTRUCT_STICHED, domain, bounds, encode, fns];\n },\n\n constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) {\n var domain = IR[1];\n var bounds = IR[2];\n var encode = IR[3];\n var fnsIR = IR[4];\n var fns = [];\n\n for (var i = 0, ii = fnsIR.length; i < ii; i++) {\n fns.push(PDFFunction.fromIR(fnsIR[i]));\n }\n\n return function constructStichedFromIRResult(args) {\n var clip = function constructStichedFromIRClip(v, min, max) {\n if (v > max)\n v = max;\n else if (v < min)\n v = min;\n return v;\n };\n\n // clip to domain\n var v = clip(args[0], domain[0], domain[1]);\n // calulate which bound the value is in\n for (var i = 0, ii = bounds.length; i < ii; ++i) {\n if (v < bounds[i])\n break;\n }\n\n // encode value into domain of function\n var dmin = domain[0];\n if (i > 0)\n dmin = bounds[i - 1];\n var dmax = domain[1];\n if (i < bounds.length)\n dmax = bounds[i];\n\n var rmin = encode[2 * i];\n var rmax = encode[2 * i + 1];\n\n var v2 = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);\n\n // call the appropropriate function\n return fns[i]([v2]);\n };\n },\n\n constructPostScript: function PDFFunction_constructPostScript(fn, dict,\n xref) {\n var domain = dict.get('Domain');\n var range = dict.get('Range');\n\n if (!domain)\n error('No domain.');\n\n if (!range)\n error('No range.');\n\n var lexer = new PostScriptLexer(fn);\n var parser = new PostScriptParser(lexer);\n var code = parser.parse();\n\n return [CONSTRUCT_POSTSCRIPT, domain, range, code];\n },\n\n constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR(\n IR) {\n var domain = IR[1];\n var range = IR[2];\n var code = IR[3];\n var numOutputs = range.length / 2;\n var evaluator = new PostScriptEvaluator(code);\n // Cache the values for a big speed up, the cache size is limited though\n // since the number of possible values can be huge from a PS function.\n var cache = new FunctionCache();\n return function constructPostScriptFromIRResult(args) {\n var initialStack = [];\n for (var i = 0, ii = (domain.length / 2); i < ii; ++i) {\n initialStack.push(args[i]);\n }\n\n var key = initialStack.join('_');\n if (cache.has(key))\n return cache.get(key);\n\n var stack = evaluator.execute(initialStack);\n var transformed = [];\n for (i = numOutputs - 1; i >= 0; --i) {\n var out = stack.pop();\n var rangeIndex = 2 * i;\n if (out < range[rangeIndex])\n out = range[rangeIndex];\n else if (out > range[rangeIndex + 1])\n out = range[rangeIndex + 1];\n transformed[i] = out;\n }\n cache.set(key, transformed);\n return transformed;\n };\n }\n };\n})();\n\nvar FunctionCache = (function FunctionCacheClosure() {\n // Of 10 PDF's with type4 functions the maxium number of distinct values seen\n // was 256. This still may need some tweaking in the future though.\n var MAX_CACHE_SIZE = 1024;\n function FunctionCache() {\n this.cache = {};\n this.total = 0;\n }\n FunctionCache.prototype = {\n has: function FunctionCache_has(key) {\n return key in this.cache;\n },\n get: function FunctionCache_get(key) {\n return this.cache[key];\n },\n set: function FunctionCache_set(key, value) {\n if (this.total < MAX_CACHE_SIZE) {\n this.cache[key] = value;\n this.total++;\n }\n }\n };\n return FunctionCache;\n})();\n\nvar PostScriptStack = (function PostScriptStackClosure() {\n var MAX_STACK_SIZE = 100;\n function PostScriptStack(initialStack) {\n this.stack = initialStack || [];\n }\n\n PostScriptStack.prototype = {\n push: function PostScriptStack_push(value) {\n if (this.stack.length >= MAX_STACK_SIZE)\n error('PostScript function stack overflow.');\n this.stack.push(value);\n },\n pop: function PostScriptStack_pop() {\n if (this.stack.length <= 0)\n error('PostScript function stack underflow.');\n return this.stack.pop();\n },\n copy: function PostScriptStack_copy(n) {\n if (this.stack.length + n >= MAX_STACK_SIZE)\n error('PostScript function stack overflow.');\n var stack = this.stack;\n for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++)\n stack.push(stack[i]);\n },\n index: function PostScriptStack_index(n) {\n this.push(this.stack[this.stack.length - n - 1]);\n },\n // rotate the last n stack elements p times\n roll: function PostScriptStack_roll(n, p) {\n var stack = this.stack;\n var l = stack.length - n;\n var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t;\n for (i = l, j = r; i < j; i++, j--) {\n t = stack[i]; stack[i] = stack[j]; stack[j] = t;\n }\n for (i = l, j = c - 1; i < j; i++, j--) {\n t = stack[i]; stack[i] = stack[j]; stack[j] = t;\n }\n for (i = c, j = r; i < j; i++, j--) {\n t = stack[i]; stack[i] = stack[j]; stack[j] = t;\n }\n }\n };\n return PostScriptStack;\n})();\nvar PostScriptEvaluator = (function PostScriptEvaluatorClosure() {\n function PostScriptEvaluator(operators, operands) {\n this.operators = operators;\n this.operands = operands;\n }\n PostScriptEvaluator.prototype = {\n execute: function PostScriptEvaluator_execute(initialStack) {\n var stack = new PostScriptStack(initialStack);\n var counter = 0;\n var operators = this.operators;\n var length = operators.length;\n var operator, a, b;\n while (counter < length) {\n operator = operators[counter++];\n if (typeof operator == 'number') {\n // Operator is really an operand and should be pushed to the stack.\n stack.push(operator);\n continue;\n }\n switch (operator) {\n // non standard ps operators\n case 'jz': // jump if false\n b = stack.pop();\n a = stack.pop();\n if (!a)\n counter = b;\n break;\n case 'j': // jump\n a = stack.pop();\n counter = a;\n break;\n\n // all ps operators in alphabetical order (excluding if/ifelse)\n case 'abs':\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n case 'add':\n b = stack.pop();\n a = stack.pop();\n stack.push(a + b);\n break;\n case 'and':\n b = stack.pop();\n a = stack.pop();\n if (isBool(a) && isBool(b))\n stack.push(a && b);\n else\n stack.push(a & b);\n break;\n case 'atan':\n a = stack.pop();\n stack.push(Math.atan(a));\n break;\n case 'bitshift':\n b = stack.pop();\n a = stack.pop();\n if (a > 0)\n stack.push(a << b);\n else\n stack.push(a >> b);\n break;\n case 'ceiling':\n a = stack.pop();\n stack.push(Math.ceil(a));\n break;\n case 'copy':\n a = stack.pop();\n stack.copy(a);\n break;\n case 'cos':\n a = stack.pop();\n stack.push(Math.cos(a));\n break;\n case 'cvi':\n a = stack.pop() | 0;\n stack.push(a);\n break;\n case 'cvr':\n // noop\n break;\n case 'div':\n b = stack.pop();\n a = stack.pop();\n stack.push(a / b);\n break;\n case 'dup':\n stack.copy(1);\n break;\n case 'eq':\n b = stack.pop();\n a = stack.pop();\n stack.push(a == b);\n break;\n case 'exch':\n stack.roll(2, 1);\n break;\n case 'exp':\n b = stack.pop();\n a = stack.pop();\n stack.push(Math.pow(a, b));\n break;\n case 'false':\n stack.push(false);\n break;\n case 'floor':\n a = stack.pop();\n stack.push(Math.floor(a));\n break;\n case 'ge':\n b = stack.pop();\n a = stack.pop();\n stack.push(a >= b);\n break;\n case 'gt':\n b = stack.pop();\n a = stack.pop();\n stack.push(a > b);\n break;\n case 'idiv':\n b = stack.pop();\n a = stack.pop();\n stack.push((a / b) | 0);\n break;\n case 'index':\n a = stack.pop();\n stack.index(a);\n break;\n case 'le':\n b = stack.pop();\n a = stack.pop();\n stack.push(a <= b);\n break;\n case 'ln':\n a = stack.pop();\n stack.push(Math.log(a));\n break;\n case 'log':\n a = stack.pop();\n stack.push(Math.log(a) / Math.LN10);\n break;\n case 'lt':\n b = stack.pop();\n a = stack.pop();\n stack.push(a < b);\n break;\n case 'mod':\n b = stack.pop();\n a = stack.pop();\n stack.push(a % b);\n break;\n case 'mul':\n b = stack.pop();\n a = stack.pop();\n stack.push(a * b);\n break;\n case 'ne':\n b = stack.pop();\n a = stack.pop();\n stack.push(a != b);\n break;\n case 'neg':\n a = stack.pop();\n stack.push(-b);\n break;\n case 'not':\n a = stack.pop();\n if (isBool(a) && isBool(b))\n stack.push(a && b);\n else\n stack.push(a & b);\n break;\n case 'or':\n b = stack.pop();\n a = stack.pop();\n if (isBool(a) && isBool(b))\n stack.push(a || b);\n else\n stack.push(a | b);\n break;\n case 'pop':\n stack.pop();\n break;\n case 'roll':\n b = stack.pop();\n a = stack.pop();\n stack.roll(a, b);\n break;\n case 'round':\n a = stack.pop();\n stack.push(Math.round(a));\n break;\n case 'sin':\n a = stack.pop();\n stack.push(Math.sin(a));\n break;\n case 'sqrt':\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n case 'sub':\n b = stack.pop();\n a = stack.pop();\n stack.push(a - b);\n break;\n case 'true':\n stack.push(true);\n break;\n case 'truncate':\n a = stack.pop();\n a = a < 0 ? Math.ceil(a) : Math.floor(a);\n stack.push(a);\n break;\n case 'xor':\n b = stack.pop();\n a = stack.pop();\n if (isBool(a) && isBool(b))\n stack.push(a != b);\n else\n stack.push(a ^ b);\n break;\n default:\n error('Unknown operator ' + operator);\n break;\n }\n }\n return stack.stack;\n }\n };\n return PostScriptEvaluator;\n})();\n\nvar PostScriptParser = (function PostScriptParserClosure() {\n function PostScriptParser(lexer) {\n this.lexer = lexer;\n this.operators = [];\n this.token = null;\n this.prev = null;\n }\n PostScriptParser.prototype = {\n nextToken: function PostScriptParser_nextToken() {\n this.prev = this.token;\n this.token = this.lexer.getToken();\n },\n accept: function PostScriptParser_accept(type) {\n if (this.token.type == type) {\n this.nextToken();\n return true;\n }\n return false;\n },\n expect: function PostScriptParser_expect(type) {\n if (this.accept(type))\n return true;\n error('Unexpected symbol: found ' + this.token.type + ' expected ' +\n type + '.');\n },\n parse: function PostScriptParser_parse() {\n this.nextToken();\n this.expect(PostScriptTokenTypes.LBRACE);\n this.parseBlock();\n this.expect(PostScriptTokenTypes.RBRACE);\n return this.operators;\n },\n parseBlock: function PostScriptParser_parseBlock() {\n while (true) {\n if (this.accept(PostScriptTokenTypes.NUMBER)) {\n this.operators.push(this.prev.value);\n } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {\n this.operators.push(this.prev.value);\n } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\n this.parseCondition();\n } else {\n return;\n }\n }\n },\n parseCondition: function PostScriptParser_parseCondition() {\n // Add two place holders that will be updated later\n var conditionLocation = this.operators.length;\n this.operators.push(null, null);\n\n this.parseBlock();\n this.expect(PostScriptTokenTypes.RBRACE);\n if (this.accept(PostScriptTokenTypes.IF)) {\n // The true block is right after the 'if' so it just falls through on\n // true else it jumps and skips the true block.\n this.operators[conditionLocation] = this.operators.length;\n this.operators[conditionLocation + 1] = 'jz';\n } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\n var jumpLocation = this.operators.length;\n this.operators.push(null, null);\n var endOfTrue = this.operators.length;\n this.parseBlock();\n this.expect(PostScriptTokenTypes.RBRACE);\n this.expect(PostScriptTokenTypes.IFELSE);\n // The jump is added at the end of the true block to skip the false\n // block.\n this.operators[jumpLocation] = this.operators.length;\n this.operators[jumpLocation + 1] = 'j';\n\n this.operators[conditionLocation] = endOfTrue;\n this.operators[conditionLocation + 1] = 'jz';\n } else {\n error('PS Function: error parsing conditional.');\n }\n }\n };\n return PostScriptParser;\n})();\n\nvar PostScriptTokenTypes = {\n LBRACE: 0,\n RBRACE: 1,\n NUMBER: 2,\n OPERATOR: 3,\n IF: 4,\n IFELSE: 5\n};\n\nvar PostScriptToken = (function PostScriptTokenClosure() {\n function PostScriptToken(type, value) {\n this.type = type;\n this.value = value;\n }\n\n var opCache = {};\n\n PostScriptToken.getOperator = function PostScriptToken_getOperator(op) {\n var opValue = opCache[op];\n if (opValue)\n return opValue;\n\n return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);\n };\n\n PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE,\n '{');\n PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE,\n '}');\n PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF');\n PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE,\n 'IFELSE');\n return PostScriptToken;\n})();\n\nvar PostScriptLexer = (function PostScriptLexerClosure() {\n function PostScriptLexer(stream) {\n this.stream = stream;\n this.nextChar();\n }\n PostScriptLexer.prototype = {\n nextChar: function PostScriptLexer_nextChar() {\n return (this.currentChar = this.stream.getByte());\n },\n getToken: function PostScriptLexer_getToken() {\n var s = '';\n var comment = false;\n var ch = this.currentChar;\n\n // skip comments\n while (true) {\n if (ch < 0) {\n return EOF;\n }\n\n if (comment) {\n if (ch === 0x0A || ch === 0x0D) {\n comment = false;\n }\n } else if (ch == 0x25) { // '%'\n comment = true;\n } else if (!Lexer.isSpace(ch)) {\n break;\n }\n ch = this.nextChar();\n }\n switch (ch | 0) {\n case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4'\n case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9'\n case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.'\n return new PostScriptToken(PostScriptTokenTypes.NUMBER,\n this.getNumber());\n case 0x7B: // '{'\n this.nextChar();\n return PostScriptToken.LBRACE;\n case 0x7D: // '}'\n this.nextChar();\n return PostScriptToken.RBRACE;\n }\n // operator\n var str = String.fromCharCode(ch);\n while ((ch = this.nextChar()) >= 0 && // and 'A'-'Z', 'a'-'z'\n ((ch >= 0x41 && ch <= 0x5A) || (ch >= 0x61 && ch <= 0x7A))) {\n str += String.fromCharCode(ch);\n }\n switch (str.toLowerCase()) {\n case 'if':\n return PostScriptToken.IF;\n case 'ifelse':\n return PostScriptToken.IFELSE;\n default:\n return PostScriptToken.getOperator(str);\n }\n },\n getNumber: function PostScriptLexer_getNumber() {\n var ch = this.currentChar;\n var str = String.fromCharCode(ch);\n while ((ch = this.nextChar()) >= 0) {\n if ((ch >= 0x30 && ch <= 0x39) || // '0'-'9'\n ch === 0x2D || ch === 0x2E) { // '-', '.'\n str += String.fromCharCode(ch);\n } else {\n break;\n }\n }\n var value = parseFloat(str);\n if (isNaN(value))\n error('Invalid floating point number: ' + value);\n return value;\n }\n };\n return PostScriptLexer;\n})();\n\n\n\nvar Annotation = (function AnnotationClosure() {\n // 12.5.5: Algorithm: Appearance streams\n function getTransformMatrix(rect, bbox, matrix) {\n var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix);\n var minX = bounds[0];\n var minY = bounds[1];\n var maxX = bounds[2];\n var maxY = bounds[3];\n\n if (minX === maxX || minY === maxY) {\n // From real-life file, bbox was [0, 0, 0, 0]. In this case,\n // just apply the transform for rect\n return [1, 0, 0, 1, rect[0], rect[1]];\n }\n\n var xRatio = (rect[2] - rect[0]) / (maxX - minX);\n var yRatio = (rect[3] - rect[1]) / (maxY - minY);\n return [\n xRatio,\n 0,\n 0,\n yRatio,\n rect[0] - minX * xRatio,\n rect[1] - minY * yRatio\n ];\n }\n\n function getDefaultAppearance(dict) {\n var appearanceState = dict.get('AP');\n if (!isDict(appearanceState)) {\n return;\n }\n\n var appearance;\n var appearances = appearanceState.get('N');\n if (isDict(appearances)) {\n var as = dict.get('AS');\n if (as && appearances.has(as.name)) {\n appearance = appearances.get(as.name);\n }\n } else {\n appearance = appearances;\n }\n return appearance;\n }\n\n function Annotation(params) {\n if (params.data) {\n this.data = params.data;\n return;\n }\n\n var dict = params.dict;\n var data = this.data = {};\n\n data.subtype = dict.get('Subtype').name;\n var rect = dict.get('Rect');\n data.rect = Util.normalizeRect(rect);\n data.annotationFlags = dict.get('F');\n\n var color = dict.get('C');\n if (isArray(color) && color.length === 3) {\n // TODO(mack): currently only supporting rgb; need support different\n // colorspaces\n data.color = color;\n } else {\n data.color = [0, 0, 0];\n }\n\n // Some types of annotations have border style dict which has more\n // info than the border array\n if (dict.has('BS')) {\n var borderStyle = dict.get('BS');\n data.borderWidth = borderStyle.has('W') ? borderStyle.get('W') : 1;\n } else {\n var borderArray = dict.get('Border') || [0, 0, 1];\n data.borderWidth = borderArray[2] || 0;\n }\n\n this.appearance = getDefaultAppearance(dict);\n data.hasAppearance = !!this.appearance;\n }\n\n Annotation.prototype = {\n\n getData: function Annotation_getData() {\n return this.data;\n },\n\n hasHtml: function Annotation_hasHtml() {\n return false;\n },\n\n getHtmlElement: function Annotation_getHtmlElement(commonObjs) {\n throw new NotImplementedException(\n 'getHtmlElement() should be implemented in subclass');\n },\n\n // TODO(mack): Remove this, it's not really that helpful.\n getEmptyContainer: function Annotation_getEmptyContainer(tagName, rect) {\n assert(!isWorker,\n 'getEmptyContainer() should be called from main thread');\n\n rect = rect || this.data.rect;\n var element = document.createElement(tagName);\n element.style.width = Math.ceil(rect[2] - rect[0]) + 'px';\n element.style.height = Math.ceil(rect[3] - rect[1]) + 'px';\n return element;\n },\n\n isViewable: function Annotation_isViewable() {\n var data = this.data;\n return !!(\n data &&\n (!data.annotationFlags ||\n !(data.annotationFlags & 0x22)) && // Hidden or NoView\n data.rect // rectangle is nessessary\n );\n },\n\n loadResources: function(keys) {\n var promise = new Promise();\n this.appearance.dict.getAsync('Resources').then(function(resources) {\n if (!resources) {\n promise.resolve();\n return;\n }\n var objectLoader = new ObjectLoader(resources.map,\n keys,\n resources.xref);\n objectLoader.load().then(function() {\n promise.resolve(resources);\n });\n }.bind(this));\n\n return promise;\n },\n\n getOperatorList: function Annotation_getToOperatorList(evaluator) {\n\n var promise = new Promise();\n\n if (!this.appearance) {\n promise.resolve(new OperatorList());\n return promise;\n }\n\n var data = this.data;\n\n var appearanceDict = this.appearance.dict;\n var resourcesPromise = this.loadResources([\n 'ExtGState',\n 'ColorSpace',\n 'Pattern',\n 'Shading',\n 'XObject',\n 'Font'\n // ProcSet\n // Properties\n ]);\n var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];\n var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];\n var transform = getTransformMatrix(data.rect, bbox, matrix);\n\n var border = data.border;\n\n resourcesPromise.then(function(resources) {\n var opList = new OperatorList();\n opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);\n evaluator.getOperatorList(this.appearance, resources, opList);\n opList.addOp(OPS.endAnnotation, []);\n promise.resolve(opList);\n }.bind(this));\n\n return promise;\n }\n };\n\n Annotation.getConstructor =\n function Annotation_getConstructor(subtype, fieldType) {\n\n if (!subtype) {\n return;\n }\n\n // TODO(mack): Implement FreeText annotations\n if (subtype === 'Link') {\n return LinkAnnotation;\n } else if (subtype === 'Text') {\n return TextAnnotation;\n } else if (subtype === 'Widget') {\n if (!fieldType) {\n return;\n }\n\n if (fieldType === 'Tx') {\n return TextWidgetAnnotation;\n } else {\n return WidgetAnnotation;\n }\n } else {\n return Annotation;\n }\n };\n\n // TODO(mack): Support loading annotation from data\n Annotation.fromData = function Annotation_fromData(data) {\n var subtype = data.subtype;\n var fieldType = data.fieldType;\n var Constructor = Annotation.getConstructor(subtype, fieldType);\n if (Constructor) {\n return new Constructor({ data: data });\n }\n };\n\n Annotation.fromRef = function Annotation_fromRef(xref, ref) {\n\n var dict = xref.fetchIfRef(ref);\n if (!isDict(dict)) {\n return;\n }\n\n var subtype = dict.get('Subtype');\n subtype = isName(subtype) ? subtype.name : '';\n if (!subtype) {\n return;\n }\n\n var fieldType = Util.getInheritableProperty(dict, 'FT');\n fieldType = isName(fieldType) ? fieldType.name : '';\n\n var Constructor = Annotation.getConstructor(subtype, fieldType);\n if (!Constructor) {\n return;\n }\n\n var params = {\n dict: dict,\n ref: ref,\n };\n\n var annotation = new Constructor(params);\n\n if (annotation.isViewable()) {\n return annotation;\n } else {\n TODO('unimplemented annotation type: ' + subtype);\n }\n };\n\n Annotation.appendToOperatorList = function Annotation_appendToOperatorList(\n annotations, opList, pdfManager, partialEvaluator) {\n\n function reject(e) {\n annotationsReadyPromise.reject(e);\n }\n\n var annotationsReadyPromise = new Promise();\n\n var annotationPromises = [];\n for (var i = 0, n = annotations.length; i < n; ++i) {\n annotationPromises.push(annotations[i].getOperatorList(partialEvaluator));\n }\n Promise.all(annotationPromises).then(function(datas) {\n opList.addOp(OPS.beginAnnotations, []);\n for (var i = 0, n = datas.length; i < n; ++i) {\n var annotOpList = datas[i];\n opList.addOpList(annotOpList);\n }\n opList.addOp(OPS.endAnnotations, []);\n annotationsReadyPromise.resolve();\n }, reject);\n\n return annotationsReadyPromise;\n };\n\n return Annotation;\n})();\nPDFJS.Annotation = Annotation;\n\n\nvar WidgetAnnotation = (function WidgetAnnotationClosure() {\n\n function WidgetAnnotation(params) {\n Annotation.call(this, params);\n\n if (params.data) {\n return;\n }\n\n var dict = params.dict;\n var data = this.data;\n\n data.fieldValue = stringToPDFString(\n Util.getInheritableProperty(dict, 'V') || '');\n data.alternativeText = stringToPDFString(dict.get('TU') || '');\n data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || '';\n var fieldType = Util.getInheritableProperty(dict, 'FT');\n data.fieldType = isName(fieldType) ? fieldType.name : '';\n data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0;\n this.fieldResources = Util.getInheritableProperty(dict, 'DR') || new Dict();\n\n // Building the full field name by collecting the field and\n // its ancestors 'T' data and joining them using '.'.\n var fieldName = [];\n var namedItem = dict;\n var ref = params.ref;\n while (namedItem) {\n var parent = namedItem.get('Parent');\n var parentRef = namedItem.getRaw('Parent');\n var name = namedItem.get('T');\n if (name) {\n fieldName.unshift(stringToPDFString(name));\n } else {\n // The field name is absent, that means more than one field\n // with the same name may exist. Replacing the empty name\n // with the '`' plus index in the parent's 'Kids' array.\n // This is not in the PDF spec but necessary to id the\n // the input controls.\n var kids = parent.get('Kids');\n var j, jj;\n for (j = 0, jj = kids.length; j < jj; j++) {\n var kidRef = kids[j];\n if (kidRef.num == ref.num && kidRef.gen == ref.gen)\n break;\n }\n fieldName.unshift('`' + j);\n }\n namedItem = parent;\n ref = parentRef;\n }\n data.fullName = fieldName.join('.');\n }\n\n var parent = Annotation.prototype;\n Util.inherit(WidgetAnnotation, Annotation, {\n isViewable: function WidgetAnnotation_isViewable() {\n if (this.data.fieldType === 'Sig') {\n TODO('unimplemented annotation type: Widget signature');\n return false;\n }\n\n return parent.isViewable.call(this);\n }\n });\n\n return WidgetAnnotation;\n})();\n\nvar TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {\n function TextWidgetAnnotation(params) {\n WidgetAnnotation.call(this, params);\n\n if (params.data) {\n return;\n }\n\n this.data.textAlignment = Util.getInheritableProperty(params.dict, 'Q');\n }\n\n // TODO(mack): This dupes some of the logic in CanvasGraphics.setFont()\n function setTextStyles(element, item, fontObj) {\n\n var style = element.style;\n style.fontSize = item.fontSize + 'px';\n style.direction = item.fontDirection < 0 ? 'rtl': 'ltr';\n\n if (!fontObj) {\n return;\n }\n\n style.fontWeight = fontObj.black ?\n (fontObj.bold ? 'bolder' : 'bold') :\n (fontObj.bold ? 'bold' : 'normal');\n style.fontStyle = fontObj.italic ? 'italic' : 'normal';\n\n var fontName = fontObj.loadedName;\n var fontFamily = fontName ? '\"' + fontName + '\", ' : '';\n // Use a reasonable default font if the font doesn't specify a fallback\n var fallbackName = fontObj.fallbackName || 'Helvetica, sans-serif';\n style.fontFamily = fontFamily + fallbackName;\n }\n\n\n var parent = WidgetAnnotation.prototype;\n Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {\n hasHtml: function TextWidgetAnnotation_hasHtml() {\n return !this.data.hasAppearance && !!this.data.fieldValue;\n },\n\n getHtmlElement: function TextWidgetAnnotation_getHtmlElement(commonObjs) {\n assert(!isWorker, 'getHtmlElement() shall be called from main thread');\n\n var item = this.data;\n\n var element = this.getEmptyContainer('div');\n element.style.display = 'table';\n\n var content = document.createElement('div');\n content.textContent = item.fieldValue;\n var textAlignment = item.textAlignment;\n content.style.textAlign = ['left', 'center', 'right'][textAlignment];\n content.style.verticalAlign = 'middle';\n content.style.display = 'table-cell';\n\n var fontObj = item.fontRefName ?\n commonObjs.getData(item.fontRefName) : null;\n var cssRules = setTextStyles(content, item, fontObj);\n\n element.appendChild(content);\n\n return element;\n },\n\n getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator) {\n if (this.appearance) {\n return Annotation.prototype.getOperatorList.call(this, evaluator);\n }\n\n var promise = new Promise();\n var opList = new OperatorList();\n var data = this.data;\n\n // Even if there is an appearance stream, ignore it. This is the\n // behaviour used by Adobe Reader.\n\n var defaultAppearance = data.defaultAppearance;\n if (!defaultAppearance) {\n promise.resolve(opList);\n return promise;\n }\n\n // Include any font resources found in the default appearance\n\n var stream = new Stream(stringToBytes(defaultAppearance));\n evaluator.getOperatorList(stream, this.fieldResources, opList);\n var appearanceFnArray = opList.fnArray;\n var appearanceArgsArray = opList.argsArray;\n var fnArray = [];\n var argsArray = [];\n\n // TODO(mack): Add support for stroke color\n data.rgb = [0, 0, 0];\n // TODO THIS DOESN'T MAKE ANY SENSE SINCE THE fnArray IS EMPTY!\n for (var i = 0, n = fnArray.length; i < n; ++i) {\n var fnId = appearanceFnArray[i];\n var args = appearanceArgsArray[i];\n\n if (fnId === OPS.setFont) {\n data.fontRefName = args[0];\n var size = args[1];\n if (size < 0) {\n data.fontDirection = -1;\n data.fontSize = -size;\n } else {\n data.fontDirection = 1;\n data.fontSize = size;\n }\n } else if (fnId === OPS.setFillRGBColor) {\n data.rgb = args;\n } else if (fnId === OPS.setFillGray) {\n var rgbValue = args[0] * 255;\n data.rgb = [rgbValue, rgbValue, rgbValue];\n }\n }\n promise.resolve(opList);\n return promise;\n }\n });\n\n return TextWidgetAnnotation;\n})();\n\nvar TextAnnotation = (function TextAnnotationClosure() {\n function TextAnnotation(params) {\n Annotation.call(this, params);\n\n if (params.data) {\n return;\n }\n\n var dict = params.dict;\n var data = this.data;\n\n var content = dict.get('Contents');\n var title = dict.get('T');\n data.content = stringToPDFString(content || '');\n data.title = stringToPDFString(title || '');\n data.name = !dict.has('Name') ? 'Note' : dict.get('Name').name;\n }\n\n var ANNOT_MIN_SIZE = 10;\n\n Util.inherit(TextAnnotation, Annotation, {\n\n getOperatorList: function TextAnnotation_getOperatorList(evaluator) {\n var promise = new Promise();\n promise.resolve(new OperatorList());\n return promise;\n },\n\n hasHtml: function TextAnnotation_hasHtml() {\n return true;\n },\n\n getHtmlElement: function TextAnnotation_getHtmlElement(commonObjs) {\n assert(!isWorker, 'getHtmlElement() shall be called from main thread');\n\n var item = this.data;\n var rect = item.rect;\n\n // sanity check because of OOo-generated PDFs\n if ((rect[3] - rect[1]) < ANNOT_MIN_SIZE) {\n rect[3] = rect[1] + ANNOT_MIN_SIZE;\n }\n if ((rect[2] - rect[0]) < ANNOT_MIN_SIZE) {\n rect[2] = rect[0] + (rect[3] - rect[1]); // make it square\n }\n\n var container = this.getEmptyContainer('section', rect);\n container.className = 'annotText';\n\n var image = document.createElement('img');\n image.style.height = container.style.height;\n var iconName = item.name;\n image.src = PDFJS.imageResourcesPath + 'annotation-' +\n iconName.toLowerCase() + '.svg';\n image.alt = '[{{type}} Annotation]';\n image.dataset.l10nId = 'text_annotation_type';\n image.dataset.l10nArgs = JSON.stringify({type: iconName});\n var content = document.createElement('div');\n content.setAttribute('hidden', true);\n var title = document.createElement('h1');\n var text = document.createElement('p');\n content.style.left = Math.floor(rect[2] - rect[0]) + 'px';\n content.style.top = '0px';\n title.textContent = item.title;\n\n if (!item.content && !item.title) {\n content.setAttribute('hidden', true);\n } else {\n var e = document.createElement('span');\n var lines = item.content.split(/(?:\\r\\n?|\\n)/);\n for (var i = 0, ii = lines.length; i < ii; ++i) {\n var line = lines[i];\n e.appendChild(document.createTextNode(line));\n if (i < (ii - 1))\n e.appendChild(document.createElement('br'));\n }\n text.appendChild(e);\n\n var showAnnotation = function showAnnotation() {\n container.style.zIndex += 1;\n content.removeAttribute('hidden');\n };\n\n var hideAnnotation = function hideAnnotation(e) {\n if (e.toElement || e.relatedTarget) { // No context menu is used\n container.style.zIndex -= 1;\n content.setAttribute('hidden', true);\n }\n };\n\n content.addEventListener('mouseover', showAnnotation, false);\n content.addEventListener('mouseout', hideAnnotation, false);\n image.addEventListener('mouseover', showAnnotation, false);\n image.addEventListener('mouseout', hideAnnotation, false);\n }\n\n content.appendChild(title);\n content.appendChild(text);\n container.appendChild(image);\n container.appendChild(content);\n\n return container;\n }\n });\n\n return TextAnnotation;\n})();\n\nvar LinkAnnotation = (function LinkAnnotationClosure() {\n function LinkAnnotation(params) {\n Annotation.call(this, params);\n\n if (params.data) {\n return;\n }\n\n var dict = params.dict;\n var data = this.data;\n\n var action = dict.get('A');\n if (action) {\n var linkType = action.get('S').name;\n if (linkType === 'URI') {\n var url = addDefaultProtocolToUrl(action.get('URI'));\n // TODO: pdf spec mentions urls can be relative to a Base\n // entry in the dictionary.\n if (!isValidUrl(url, false)) {\n url = '';\n }\n data.url = url;\n } else if (linkType === 'GoTo') {\n data.dest = action.get('D');\n } else if (linkType === 'GoToR') {\n var urlDict = action.get('F');\n if (isDict(urlDict)) {\n // We assume that the 'url' is a Filspec dictionary\n // and fetch the url without checking any further\n url = urlDict.get('F') || '';\n }\n\n // TODO: pdf reference says that GoToR\n // can also have 'NewWindow' attribute\n if (!isValidUrl(url, false)) {\n url = '';\n }\n data.url = url;\n data.dest = action.get('D');\n } else if (linkType === 'Named') {\n data.action = action.get('N').name;\n } else {\n TODO('unrecognized link type: ' + linkType);\n }\n } else if (dict.has('Dest')) {\n // simple destination link\n var dest = dict.get('Dest');\n data.dest = isName(dest) ? dest.name : dest;\n }\n }\n\n // Lets URLs beginning with 'www.' default to using the 'http://' protocol.\n function addDefaultProtocolToUrl(url) {\n if (url.indexOf('www.') === 0) {\n return ('http://' + url);\n }\n return url;\n }\n\n Util.inherit(LinkAnnotation, Annotation, {\n hasOperatorList: function LinkAnnotation_hasOperatorList() {\n return false;\n },\n\n hasHtml: function LinkAnnotation_hasHtml() {\n return true;\n },\n\n getHtmlElement: function LinkAnnotation_getHtmlElement(commonObjs) {\n var rect = this.data.rect;\n var element = document.createElement('a');\n var borderWidth = this.data.borderWidth;\n\n element.style.borderWidth = borderWidth + 'px';\n var color = this.data.color;\n var rgb = [];\n for (var i = 0; i < 3; ++i) {\n rgb[i] = Math.round(color[i] * 255);\n }\n element.style.borderColor = Util.makeCssRgb(rgb);\n element.style.borderStyle = 'solid';\n\n var width = rect[2] - rect[0] - 2 * borderWidth;\n var height = rect[3] - rect[1] - 2 * borderWidth;\n element.style.width = width + 'px';\n element.style.height = height + 'px';\n\n element.href = this.data.url || '';\n return element;\n }\n });\n\n return LinkAnnotation;\n})();\n\n\n/**\n * The maximum allowed image size in total pixels e.g. width * height. Images\n * above this value will not be drawn. Use -1 for no limit.\n * @var {Number}\n */\nPDFJS.maxImageSize = PDFJS.maxImageSize === undefined ? -1 : PDFJS.maxImageSize;\n\n/**\n * By default fonts are converted to OpenType fonts and loaded via font face\n * rules. If disabled, the font will be rendered using a built in font renderer\n * that constructs the glyphs with primitive path commands.\n * @var {Boolean}\n */\nPDFJS.disableFontFace = PDFJS.disableFontFace === undefined ?\n false : PDFJS.disableFontFace;\n\n/**\n * Path for image resources, mainly for annotation icons. Include trailing\n * slash.\n * @var {String}\n */\nPDFJS.imageResourcesPath = PDFJS.imageResourcesPath === undefined ?\n '' : PDFJS.imageResourcesPath;\n\n/**\n * Disable the web worker and run all code on the main thread. This will happen\n * automatically if the browser doesn't support workers or sending typed arrays\n * to workers.\n * @var {Boolean}\n */\nPDFJS.disableWorker = PDFJS.disableWorker === undefined ?\n false : PDFJS.disableWorker;\n\n/**\n * Path and filename of the worker file. Required when the worker is enabled in\n * development mode. If unspecified in the production build, the worker will be\n * loaded based on the location of the pdf.js file.\n * @var {String}\n */\nPDFJS.workerSrc = PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc;\n\n/**\n * Disable range request loading of PDF files. When enabled and if the server\n * supports partial content requests then the PDF will be fetched in chunks.\n * Enabled (false) by default.\n * @var {Boolean}\n */\nPDFJS.disableRange = PDFJS.disableRange === undefined ?\n false : PDFJS.disableRange;\n\n/**\n * Disable pre-fetching of PDF file data. When range requests are enabled PDF.js\n * will automatically keep fetching more data even if it isn't needed to display\n * the current page. This default behavior can be disabled.\n * @var {Boolean}\n */\nPDFJS.disableAutoFetch = PDFJS.disableAutoFetch === undefined ?\n false : PDFJS.disableAutoFetch;\n\n/**\n * Enables special hooks for debugging PDF.js.\n * @var {Boolean}\n */\nPDFJS.pdfBug = PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug;\n\n/**\n * Enables transfer usage in postMessage for ArrayBuffers.\n * @var {boolean}\n */\nPDFJS.postMessageTransfers = PDFJS.postMessageTransfers === undefined ?\n true : PDFJS.postMessageTransfers;\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)\n * is used, which means it must follow the same origin rules that any XHR does\n * e.g. No cross domain requests without CORS.\n *\n * @param {string|TypedAray|object} source Can be an url to where a PDF is\n * located, a typed array (Uint8Array) already populated with data or\n * and parameter object with the following possible fields:\n * - url - The URL of the PDF.\n * - data - A typed array with PDF data.\n * - httpHeaders - Basic authentication headers.\n * - password - For decrypting password-protected PDFs.\n * - initialData - A typed array with the first portion or all of the pdf data.\n * Used by the extension since some data is already loaded\n * before the switch to range requests. \n *\n * @param {object} pdfDataRangeTransport is optional. It is used if you want\n * to manually serve range requests for data in the PDF. See viewer.js for\n * an example of pdfDataRangeTransport's interface.\n *\n * @param {function} passwordCallback is optional. It is used to request a\n * password if wrong or no password was provided. The callback receives two\n * parameters: function that needs to be called with new password and reason\n * (see {PasswordResponses}).\n *\n * @return {Promise} A promise that is resolved with {PDFDocumentProxy} object.\n */\nPDFJS.getDocument = function getDocument(source,\n pdfDataRangeTransport,\n passwordCallback,\n progressCallback) {\n var workerInitializedPromise, workerReadyPromise, transport;\n\n if (typeof source === 'string') {\n source = { url: source };\n } else if (isArrayBuffer(source)) {\n source = { data: source };\n } else if (typeof source !== 'object') {\n error('Invalid parameter in getDocument, need either Uint8Array, ' +\n 'string or a parameter object');\n }\n\n if (!source.url && !source.data)\n error('Invalid parameter array, need either .data or .url');\n\n // copy/use all keys as is except 'url' -- full path is required\n var params = {};\n for (var key in source) {\n if (key === 'url' && typeof window !== 'undefined') {\n params[key] = combineUrl(window.location.href, source[key]);\n continue;\n }\n params[key] = source[key];\n }\n\n workerInitializedPromise = new PDFJS.Promise();\n workerReadyPromise = new PDFJS.Promise();\n transport = new WorkerTransport(workerInitializedPromise,\n workerReadyPromise, pdfDataRangeTransport, progressCallback);\n workerInitializedPromise.then(function transportInitialized() {\n transport.passwordCallback = passwordCallback;\n transport.fetchDocument(params);\n });\n return workerReadyPromise;\n};\n\n/**\n * Proxy to a PDFDocument in the worker thread. Also, contains commonly used\n * properties that can be read synchronously.\n */\nvar PDFDocumentProxy = (function PDFDocumentProxyClosure() {\n function PDFDocumentProxy(pdfInfo, transport) {\n this.pdfInfo = pdfInfo;\n this.transport = transport;\n }\n PDFDocumentProxy.prototype = {\n /**\n * @return {number} Total number of pages the PDF contains.\n */\n get numPages() {\n return this.pdfInfo.numPages;\n },\n /**\n * @return {string} A unique ID to identify a PDF. Not guaranteed to be\n * unique.\n */\n get fingerprint() {\n return this.pdfInfo.fingerprint;\n },\n /**\n * @return {boolean} true if embedded document fonts are in use. Will be\n * set during rendering of the pages.\n */\n get embeddedFontsUsed() {\n return this.transport.embeddedFontsUsed;\n },\n /**\n * @param {number} The page number to get. The first page is 1.\n * @return {Promise} A promise that is resolved with a {PDFPageProxy}\n * object.\n */\n getPage: function PDFDocumentProxy_getPage(number) {\n return this.transport.getPage(number);\n },\n /**\n * @param {object} Must have 'num' and 'gen' properties.\n * @return {Promise} A promise that is resolved with the page index that is\n * associated with the reference.\n */\n getPageIndex: function PDFDocumentProxy_getPageIndex(ref) {\n return this.transport.getPageIndex(ref);\n },\n /**\n * @return {Promise} A promise that is resolved with a lookup table for\n * mapping named destinations to reference numbers.\n */\n getDestinations: function PDFDocumentProxy_getDestinations() {\n return this.transport.getDestinations();\n },\n /**\n * @return {Promise} A promise that is resolved with an array of all the\n * JavaScript strings in the name tree.\n */\n getJavaScript: function PDFDocumentProxy_getDestinations() {\n var promise = new PDFJS.Promise();\n var js = this.pdfInfo.javaScript;\n promise.resolve(js);\n return promise;\n },\n /**\n * @return {Promise} A promise that is resolved with an {array} that is a\n * tree outline (if it has one) of the PDF. The tree is in the format of:\n * [\n * {\n * title: string,\n * bold: boolean,\n * italic: boolean,\n * color: rgb array,\n * dest: dest obj,\n * items: array of more items like this\n * },\n * ...\n * ].\n */\n getOutline: function PDFDocumentProxy_getOutline() {\n var promise = new PDFJS.Promise();\n var outline = this.pdfInfo.outline;\n promise.resolve(outline);\n return promise;\n },\n /**\n * @return {Promise} A promise that is resolved with an {object} that has\n * info and metadata properties. Info is an {object} filled with anything\n * available in the information dictionary and similarly metadata is a\n * {Metadata} object with information from the metadata section of the PDF.\n */\n getMetadata: function PDFDocumentProxy_getMetadata() {\n var promise = new PDFJS.Promise();\n var info = this.pdfInfo.info;\n var metadata = this.pdfInfo.metadata;\n promise.resolve({\n info: info,\n metadata: metadata ? new PDFJS.Metadata(metadata) : null\n });\n return promise;\n },\n isEncrypted: function PDFDocumentProxy_isEncrypted() {\n var promise = new PDFJS.Promise();\n promise.resolve(this.pdfInfo.encrypted);\n return promise;\n },\n /**\n * @return {Promise} A promise that is resolved with a TypedArray that has\n * the raw data from the PDF.\n */\n getData: function PDFDocumentProxy_getData() {\n var promise = new PDFJS.Promise();\n this.transport.getData(promise);\n return promise;\n },\n /**\n * @return {Promise} A promise that is resolved when the document's data\n * is loaded\n */\n dataLoaded: function PDFDocumentProxy_dataLoaded() {\n return this.transport.dataLoaded();\n },\n cleanup: function PDFDocumentProxy_cleanup() {\n this.transport.startCleanup();\n },\n destroy: function PDFDocumentProxy_destroy() {\n this.transport.destroy();\n }\n };\n return PDFDocumentProxy;\n})();\n\nvar PDFPageProxy = (function PDFPageProxyClosure() {\n function PDFPageProxy(pageInfo, transport) {\n this.pageInfo = pageInfo;\n this.transport = transport;\n this.stats = new StatTimer();\n this.stats.enabled = !!globalScope.PDFJS.enableStats;\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n this.receivingOperatorList = false;\n this.cleanupAfterRender = false;\n this.pendingDestroy = false;\n this.renderTasks = [];\n }\n PDFPageProxy.prototype = {\n /**\n * @return {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this.pageInfo.pageIndex + 1;\n },\n /**\n * @return {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this.pageInfo.rotate;\n },\n /**\n * @return {object} The reference that points to this page. It has 'num' and\n * 'gen' properties.\n */\n get ref() {\n return this.pageInfo.ref;\n },\n /**\n * @return {array} An array of the visible portion of the PDF page in the\n * user space units - [x1, y1, x2, y2].\n */\n get view() {\n return this.pageInfo.view;\n },\n /**\n * @param {number} scale The desired scale of the viewport.\n * @param {number} rotate Degrees to rotate the viewport. If omitted this\n * defaults to the page rotation.\n * @return {PageViewport} Contains 'width' and 'height' properties along\n * with transforms required for rendering.\n */\n getViewport: function PDFPageProxy_getViewport(scale, rotate) {\n if (arguments.length < 2)\n rotate = this.rotate;\n return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);\n },\n /**\n * @return {Promise} A promise that is resolved with an {array} of the\n * annotation objects.\n */\n getAnnotations: function PDFPageProxy_getAnnotations() {\n if (this.annotationsPromise)\n return this.annotationsPromise;\n\n var promise = new PDFJS.Promise();\n this.annotationsPromise = promise;\n this.transport.getAnnotations(this.pageInfo.pageIndex);\n return promise;\n },\n /**\n * Begins the process of rendering a page to the desired context.\n * @param {object} params A parameter object that supports:\n * {\n * canvasContext(required): A 2D context of a DOM Canvas object.,\n * textLayer(optional): An object that has beginLayout, endLayout, and\n * appendText functions.,\n * imageLayer(optional): An object that has beginLayout, endLayout and\n * appendImage functions.,\n * continueCallback(optional): A function that will be called each time\n * the rendering is paused. To continue\n * rendering call the function that is the\n * first argument to the callback.\n * }.\n * @return {RenderTask} An extended promise that is resolved when the page\n * finishes rendering (see RenderTask).\n */\n render: function PDFPageProxy_render(params) {\n var stats = this.stats;\n stats.time('Overall');\n\n // If there was a pending destroy cancel it so no cleanup happens during\n // this call to render.\n this.pendingDestroy = false;\n\n // If there is no displayReadyPromise yet, then the operatorList was never\n // requested before. Make the request and create the promise.\n if (!this.displayReadyPromise) {\n this.receivingOperatorList = true;\n this.displayReadyPromise = new Promise();\n this.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false\n };\n\n this.stats.time('Page Request');\n this.transport.messageHandler.send('RenderPageRequest', {\n pageIndex: this.pageNumber - 1\n });\n }\n\n var internalRenderTask = new InternalRenderTask(complete, params,\n this.objs, this.commonObjs,\n this.operatorList, this.pageNumber);\n this.renderTasks.push(internalRenderTask);\n var renderTask = new RenderTask(internalRenderTask);\n\n var self = this;\n this.displayReadyPromise.then(\n function pageDisplayReadyPromise(transparency) {\n if (self.pendingDestroy) {\n complete();\n return;\n }\n stats.time('Rendering');\n internalRenderTask.initalizeGraphics(transparency);\n internalRenderTask.operatorListChanged();\n },\n function pageDisplayReadPromiseError(reason) {\n complete(reason);\n }\n );\n\n function complete(error) {\n var i = self.renderTasks.indexOf(internalRenderTask);\n if (i >= 0) {\n self.renderTasks.splice(i, 1);\n }\n\n if (self.cleanupAfterRender) {\n self.pendingDestroy = true;\n }\n self._tryDestroy();\n\n if (error) {\n renderTask.reject(error);\n } else {\n renderTask.resolve();\n }\n stats.timeEnd('Rendering');\n stats.timeEnd('Overall');\n }\n\n return renderTask;\n },\n /**\n * @return {Promise} That is resolved with the a {string} that is the text\n * content from the page.\n */\n getTextContent: function PDFPageProxy_getTextContent() {\n var promise = new PDFJS.Promise();\n this.transport.messageHandler.send('GetTextContent', {\n pageIndex: this.pageNumber - 1\n },\n function textContentCallback(textContent) {\n promise.resolve(textContent);\n }\n );\n return promise;\n },\n /**\n * Stub for future feature.\n */\n getOperationList: function PDFPageProxy_getOperationList() {\n var promise = new PDFJS.Promise();\n var operationList = { // not implemented\n dependencyFontsID: null,\n operatorList: null\n };\n promise.resolve(operationList);\n return promise;\n },\n /**\n * Destroys resources allocated by the page.\n */\n destroy: function PDFPageProxy_destroy() {\n this.pendingDestroy = true;\n this._tryDestroy();\n },\n /**\n * For internal use only. Attempts to clean up if rendering is in a state\n * where that's possible.\n */\n _tryDestroy: function PDFPageProxy__destroy() {\n if (!this.pendingDestroy ||\n this.renderTasks.length !== 0 ||\n this.receivingOperatorList) {\n return;\n }\n\n delete this.operatorList;\n delete this.displayReadyPromise;\n this.objs.clear();\n this.pendingDestroy = false;\n },\n /**\n * For internal use only.\n */\n _startRenderPage: function PDFPageProxy_startRenderPage(transparency) {\n this.displayReadyPromise.resolve(transparency);\n },\n /**\n * For internal use only.\n */\n _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk) {\n // Add the new chunk to the current operator list.\n for (var i = 0, ii = operatorListChunk.length; i < ii; i++) {\n this.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n this.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n this.operatorList.lastChunk = operatorListChunk.lastChunk;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (var i = 0; i < this.renderTasks.length; i++) {\n this.renderTasks[i].operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this.receivingOperatorList = false;\n this._tryDestroy();\n }\n }\n };\n return PDFPageProxy;\n})();\n/**\n * For internal use only.\n */\nvar WorkerTransport = (function WorkerTransportClosure() {\n function WorkerTransport(workerInitializedPromise, workerReadyPromise,\n pdfDataRangeTransport, progressCallback) {\n this.pdfDataRangeTransport = pdfDataRangeTransport;\n\n this.workerReadyPromise = workerReadyPromise;\n this.progressCallback = progressCallback;\n this.commonObjs = new PDFObjects();\n\n this.pageCache = [];\n this.pagePromises = [];\n this.embeddedFontsUsed = false;\n\n this.passwordCallback = null;\n\n // If worker support isn't disabled explicit and the browser has worker\n // support, create a new web worker and test if it/the browser fullfills\n // all requirements to run parts of pdf.js in a web worker.\n // Right now, the requirement is, that an Uint8Array is still an Uint8Array\n // as it arrives on the worker. Chrome added this with version 15.\n if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') {\n var workerSrc = PDFJS.workerSrc;\n if (!workerSrc) {\n error('No PDFJS.workerSrc specified');\n }\n\n try {\n // Some versions of FF can't create a worker on localhost, see:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=683280\n var worker = new Worker(workerSrc);\n var messageHandler = new MessageHandler('main', worker);\n this.messageHandler = messageHandler;\n\n messageHandler.on('test', function transportTest(data) {\n var supportTypedArray = data && data.supportTypedArray;\n if (supportTypedArray) {\n this.worker = worker;\n if (!data.supportTransfers) {\n PDFJS.postMessageTransfers = false;\n }\n this.setupMessageHandler(messageHandler);\n workerInitializedPromise.resolve();\n } else {\n globalScope.PDFJS.disableWorker = true;\n this.loadFakeWorkerFiles().then(function() {\n this.setupFakeWorker();\n workerInitializedPromise.resolve();\n }.bind(this));\n }\n }.bind(this));\n\n var testObj = new Uint8Array([PDFJS.postMessageTransfers ? 255 : 0]);\n // Some versions of Opera throw a DATA_CLONE_ERR on serializing the\n // typed array. Also, checking if we can use transfers.\n try {\n messageHandler.send('test', testObj, null, [testObj.buffer]);\n } catch (ex) {\n info('Cannot use postMessage transfers');\n testObj[0] = 0;\n messageHandler.send('test', testObj);\n }\n return;\n } catch (e) {\n info('The worker has been disabled.');\n }\n }\n // Either workers are disabled, not supported or have thrown an exception.\n // Thus, we fallback to a faked worker.\n globalScope.PDFJS.disableWorker = true;\n this.loadFakeWorkerFiles().then(function() {\n this.setupFakeWorker();\n workerInitializedPromise.resolve();\n }.bind(this));\n }\n WorkerTransport.prototype = {\n destroy: function WorkerTransport_destroy() {\n this.pageCache = [];\n this.pagePromises = [];\n var self = this;\n this.messageHandler.send('Terminate', null, function () {\n if (self.worker) {\n self.worker.terminate();\n }\n });\n },\n\n loadFakeWorkerFiles: function WorkerTransport_loadFakeWorkerFiles() {\n if (!PDFJS.fakeWorkerFilesLoadedPromise) {\n PDFJS.fakeWorkerFilesLoadedPromise = new Promise();\n // In the developer build load worker_loader which in turn loads all the\n // other files and resolves the promise. In production only the\n // pdf.worker.js file is needed.\n Util.loadScript(PDFJS.workerSrc, function() {\n PDFJS.fakeWorkerFilesLoadedPromise.resolve();\n });\n }\n return PDFJS.fakeWorkerFilesLoadedPromise;\n },\n\n setupFakeWorker: function WorkerTransport_setupFakeWorker() {\n warn('Setting up fake worker.');\n // If we don't use a worker, just post/sendMessage to the main thread.\n var fakeWorker = {\n postMessage: function WorkerTransport_postMessage(obj) {\n fakeWorker.onmessage({data: obj});\n },\n terminate: function WorkerTransport_terminate() {}\n };\n\n var messageHandler = new MessageHandler('main', fakeWorker);\n this.setupMessageHandler(messageHandler);\n\n // If the main thread is our worker, setup the handling for the messages\n // the main thread sends to it self.\n PDFJS.WorkerMessageHandler.setup(messageHandler);\n },\n\n setupMessageHandler:\n function WorkerTransport_setupMessageHandler(messageHandler) {\n this.messageHandler = messageHandler;\n\n function updatePassword(password) {\n messageHandler.send('UpdatePassword', password);\n }\n\n var pdfDataRangeTransport = this.pdfDataRangeTransport;\n if (pdfDataRangeTransport) {\n pdfDataRangeTransport.addRangeListener(function(begin, chunk) {\n messageHandler.send('OnDataRange', {\n begin: begin,\n chunk: chunk\n });\n });\n\n pdfDataRangeTransport.addProgressListener(function(loaded) {\n messageHandler.send('OnDataProgress', {\n loaded: loaded\n });\n });\n\n messageHandler.on('RequestDataRange',\n function transportDataRange(data) {\n pdfDataRangeTransport.requestDataRange(data.begin, data.end);\n }, this);\n }\n\n messageHandler.on('GetDoc', function transportDoc(data) {\n var pdfInfo = data.pdfInfo;\n var pdfDocument = new PDFDocumentProxy(pdfInfo, this);\n this.pdfDocument = pdfDocument;\n this.workerReadyPromise.resolve(pdfDocument);\n }, this);\n\n messageHandler.on('NeedPassword', function transportPassword(data) {\n if (this.passwordCallback) {\n return this.passwordCallback(updatePassword,\n PasswordResponses.NEED_PASSWORD);\n }\n this.workerReadyPromise.reject(data.exception.message, data.exception);\n }, this);\n\n messageHandler.on('IncorrectPassword', function transportBadPass(data) {\n if (this.passwordCallback) {\n return this.passwordCallback(updatePassword,\n PasswordResponses.INCORRECT_PASSWORD);\n }\n this.workerReadyPromise.reject(data.exception.message, data.exception);\n }, this);\n\n messageHandler.on('InvalidPDF', function transportInvalidPDF(data) {\n this.workerReadyPromise.reject(data.exception.name, data.exception);\n }, this);\n\n messageHandler.on('MissingPDF', function transportMissingPDF(data) {\n this.workerReadyPromise.reject(data.exception.message, data.exception);\n }, this);\n\n messageHandler.on('UnknownError', function transportUnknownError(data) {\n this.workerReadyPromise.reject(data.exception.message, data.exception);\n }, this);\n\n messageHandler.on('GetPage', function transportPage(data) {\n var pageInfo = data.pageInfo;\n var page = new PDFPageProxy(pageInfo, this);\n this.pageCache[pageInfo.pageIndex] = page;\n var promise = this.pagePromises[pageInfo.pageIndex];\n promise.resolve(page);\n }, this);\n\n messageHandler.on('GetAnnotations', function transportAnnotations(data) {\n var annotations = data.annotations;\n var promise = this.pageCache[data.pageIndex].annotationsPromise;\n promise.resolve(annotations);\n }, this);\n\n messageHandler.on('StartRenderPage', function transportRender(data) {\n var page = this.pageCache[data.pageIndex];\n\n page.stats.timeEnd('Page Request');\n page._startRenderPage(data.transparency);\n }, this);\n\n messageHandler.on('RenderPageChunk', function transportRender(data) {\n var page = this.pageCache[data.pageIndex];\n\n page._renderPageChunk(data.operatorList);\n }, this);\n\n messageHandler.on('commonobj', function transportObj(data) {\n var id = data[0];\n var type = data[1];\n if (this.commonObjs.hasData(id))\n return;\n\n switch (type) {\n case 'Font':\n var exportedData = data[2];\n\n var font;\n if ('error' in exportedData) {\n var error = exportedData.error;\n warn('Error during font loading: ' + error);\n this.commonObjs.resolve(id, error);\n break;\n } else {\n font = new FontFace(exportedData);\n }\n\n FontLoader.bind(\n [font],\n function fontReady(fontObjs) {\n this.commonObjs.resolve(id, font);\n }.bind(this)\n );\n break;\n case 'FontPath':\n this.commonObjs.resolve(id, data[2]);\n break;\n default:\n error('Got unknown common object type ' + type);\n }\n }, this);\n\n messageHandler.on('obj', function transportObj(data) {\n var id = data[0];\n var pageIndex = data[1];\n var type = data[2];\n var pageProxy = this.pageCache[pageIndex];\n if (pageProxy.objs.hasData(id))\n return;\n\n switch (type) {\n case 'JpegStream':\n var imageData = data[3];\n loadJpegStream(id, imageData, pageProxy.objs);\n break;\n case 'Image':\n var imageData = data[3];\n pageProxy.objs.resolve(id, imageData);\n\n // heuristics that will allow not to store large data\n var MAX_IMAGE_SIZE_TO_STORE = 8000000;\n if ('data' in imageData &&\n imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {\n pageProxy.cleanupAfterRender = true;\n }\n break;\n default:\n error('Got unknown object type ' + type);\n }\n }, this);\n\n messageHandler.on('DocProgress', function transportDocProgress(data) {\n if (this.progressCallback) {\n this.progressCallback({\n loaded: data.loaded,\n total: data.total\n });\n }\n }, this);\n\n messageHandler.on('DocError', function transportDocError(data) {\n this.workerReadyPromise.reject(data);\n }, this);\n\n messageHandler.on('PageError', function transportError(data) {\n var page = this.pageCache[data.pageNum - 1];\n if (page.displayReadyPromise)\n page.displayReadyPromise.reject(data.error);\n else\n error(data.error);\n }, this);\n\n messageHandler.on('JpegDecode', function(data, promise) {\n var imageUrl = data[0];\n var components = data[1];\n if (components != 3 && components != 1)\n error('Only 3 component or 1 component can be returned');\n\n var img = new Image();\n img.onload = (function messageHandler_onloadClosure() {\n var width = img.width;\n var height = img.height;\n var size = width * height;\n var rgbaLength = size * 4;\n var buf = new Uint8Array(size * components);\n var tmpCanvas = createScratchCanvas(width, height);\n var tmpCtx = tmpCanvas.getContext('2d');\n tmpCtx.drawImage(img, 0, 0);\n var data = tmpCtx.getImageData(0, 0, width, height).data;\n\n if (components == 3) {\n for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {\n buf[j] = data[i];\n buf[j + 1] = data[i + 1];\n buf[j + 2] = data[i + 2];\n }\n } else if (components == 1) {\n for (var i = 0, j = 0; i < rgbaLength; i += 4, j++) {\n buf[j] = data[i];\n }\n }\n promise.resolve({ data: buf, width: width, height: height});\n }).bind(this);\n img.src = imageUrl;\n });\n },\n\n fetchDocument: function WorkerTransport_fetchDocument(source) {\n source.disableAutoFetch = PDFJS.disableAutoFetch;\n source.chunkedViewerLoading = !!this.pdfDataRangeTransport;\n this.messageHandler.send('GetDocRequest', {\n source: source,\n disableRange: PDFJS.disableRange,\n maxImageSize: PDFJS.maxImageSize,\n disableFontFace: PDFJS.disableFontFace\n });\n },\n\n getData: function WorkerTransport_getData(promise) {\n this.messageHandler.send('GetData', null, function(data) {\n promise.resolve(data);\n });\n },\n\n dataLoaded: function WorkerTransport_dataLoaded() {\n var promise = new PDFJS.Promise();\n this.messageHandler.send('DataLoaded', null, function(args) {\n promise.resolve(args);\n });\n return promise;\n },\n\n getPage: function WorkerTransport_getPage(pageNumber, promise) {\n var pageIndex = pageNumber - 1;\n if (pageIndex in this.pagePromises)\n return this.pagePromises[pageIndex];\n var promise = new PDFJS.Promise('Page ' + pageNumber);\n this.pagePromises[pageIndex] = promise;\n this.messageHandler.send('GetPageRequest', { pageIndex: pageIndex });\n return promise;\n },\n\n getPageIndex: function WorkerTransport_getPageIndexByRef(ref) {\n var promise = new PDFJS.Promise();\n this.messageHandler.send('GetPageIndex', { ref: ref },\n function (pageIndex) {\n promise.resolve(pageIndex);\n }\n );\n return promise;\n },\n\n getAnnotations: function WorkerTransport_getAnnotations(pageIndex) {\n this.messageHandler.send('GetAnnotationsRequest',\n { pageIndex: pageIndex });\n },\n\n getDestinations: function WorkerTransport_getDestinations() {\n var promise = new PDFJS.Promise();\n this.messageHandler.send('GetDestinations', null,\n function transportDestinations(destinations) {\n promise.resolve(destinations);\n }\n );\n return promise;\n },\n\n startCleanup: function WorkerTransport_startCleanup() {\n this.messageHandler.send('Cleanup', null,\n function endCleanup() {\n for (var i = 0, ii = this.pageCache.length; i < ii; i++) {\n var page = this.pageCache[i];\n if (page) {\n page.destroy();\n }\n }\n this.commonObjs.clear();\n FontLoader.clear();\n }.bind(this)\n );\n }\n };\n return WorkerTransport;\n\n})();\n\n/**\n * A PDF document and page is built of many objects. E.g. there are objects\n * for fonts, images, rendering code and such. These objects might get processed\n * inside of a worker. The `PDFObjects` implements some basic functions to\n * manage these objects.\n */\nvar PDFObjects = (function PDFObjectsClosure() {\n function PDFObjects() {\n this.objs = {};\n }\n\n PDFObjects.prototype = {\n /**\n * Internal function.\n * Ensures there is an object defined for `objId`.\n */\n ensureObj: function PDFObjects_ensureObj(objId) {\n if (this.objs[objId])\n return this.objs[objId];\n\n var obj = {\n promise: new Promise(objId),\n data: null,\n resolved: false\n };\n this.objs[objId] = obj;\n\n return obj;\n },\n\n /**\n * If called *without* callback, this returns the data of `objId` but the\n * object needs to be resolved. If it isn't, this function throws.\n *\n * If called *with* a callback, the callback is called with the data of the\n * object once the object is resolved. That means, if you call this\n * function and the object is already resolved, the callback gets called\n * right away.\n */\n get: function PDFObjects_get(objId, callback) {\n // If there is a callback, then the get can be async and the object is\n // not required to be resolved right now\n if (callback) {\n this.ensureObj(objId).promise.then(callback);\n return null;\n }\n\n // If there isn't a callback, the user expects to get the resolved data\n // directly.\n var obj = this.objs[objId];\n\n // If there isn't an object yet or the object isn't resolved, then the\n // data isn't ready yet!\n if (!obj || !obj.resolved)\n error('Requesting object that isn\\'t resolved yet ' + objId);\n\n return obj.data;\n },\n\n /**\n * Resolves the object `objId` with optional `data`.\n */\n resolve: function PDFObjects_resolve(objId, data) {\n var obj = this.ensureObj(objId);\n\n obj.resolved = true;\n obj.data = data;\n obj.promise.resolve(data);\n },\n\n isResolved: function PDFObjects_isResolved(objId) {\n var objs = this.objs;\n\n if (!objs[objId]) {\n return false;\n } else {\n return objs[objId].resolved;\n }\n },\n\n hasData: function PDFObjects_hasData(objId) {\n return this.isResolved(objId);\n },\n\n /**\n * Returns the data of `objId` if object exists, null otherwise.\n */\n getData: function PDFObjects_getData(objId) {\n var objs = this.objs;\n if (!objs[objId] || !objs[objId].resolved) {\n return null;\n } else {\n return objs[objId].data;\n }\n },\n\n clear: function PDFObjects_clear() {\n this.objs = {};\n }\n };\n return PDFObjects;\n})();\n/*\n * RenderTask is basically a promise but adds a cancel function to terminate it.\n */\nvar RenderTask = (function RenderTaskClosure() {\n function RenderTask(internalRenderTask) {\n this.internalRenderTask = internalRenderTask;\n Promise.call(this);\n }\n\n RenderTask.prototype = Object.create(Promise.prototype);\n\n /**\n * Cancel the rendering task. If the task is curently rendering it will not be\n * cancelled until graphics pauses with a timeout. The promise that this\n * object extends will resolved when cancelled.\n */\n RenderTask.prototype.cancel = function RenderTask_cancel() {\n this.internalRenderTask.cancel();\n };\n\n return RenderTask;\n})();\n\nvar InternalRenderTask = (function InternalRenderTaskClosure() {\n\n function InternalRenderTask(callback, params, objs, commonObjs, operatorList,\n pageNumber) {\n this.callback = callback;\n this.params = params;\n this.objs = objs;\n this.commonObjs = commonObjs;\n this.operatorListIdx = null;\n this.operatorList = operatorList;\n this.pageNumber = pageNumber;\n this.running = false;\n this.graphicsReadyCallback = null;\n this.graphicsReady = false;\n this.cancelled = false;\n }\n\n InternalRenderTask.prototype = {\n\n initalizeGraphics:\n function InternalRenderTask_initalizeGraphics(transparency) {\n\n if (this.cancelled) {\n return;\n }\n if (PDFJS.pdfBug && 'StepperManager' in globalScope &&\n globalScope.StepperManager.enabled) {\n this.stepper = globalScope.StepperManager.create(this.pageNumber - 1);\n this.stepper.init(this.operatorList);\n this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n }\n\n var params = this.params;\n this.gfx = new CanvasGraphics(params.canvasContext, this.commonObjs,\n this.objs, params.textLayer,\n params.imageLayer);\n\n this.gfx.beginDrawing(params.viewport, transparency);\n this.operatorListIdx = 0;\n this.graphicsReady = true;\n if (this.graphicsReadyCallback) {\n this.graphicsReadyCallback();\n }\n },\n\n cancel: function InternalRenderTask_cancel() {\n this.running = false;\n this.cancelled = true;\n this.callback('cancelled');\n },\n\n operatorListChanged: function InternalRenderTask_operatorListChanged() {\n if (!this.graphicsReady) {\n if (!this.graphicsReadyCallback) {\n this.graphicsReadyCallback = this._continue.bind(this);\n }\n return;\n }\n\n if (this.stepper) {\n this.stepper.updateOperatorList(this.operatorList);\n }\n\n if (this.running) {\n return;\n }\n this._continue();\n },\n\n _continue: function InternalRenderTask__continue() {\n this.running = true;\n if (this.cancelled) {\n return;\n }\n if (this.params.continueCallback) {\n this.params.continueCallback(this._next.bind(this));\n } else {\n this._next();\n }\n },\n\n _next: function InternalRenderTask__next() {\n if (this.cancelled) {\n return;\n }\n this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList,\n this.operatorListIdx,\n this._continue.bind(this),\n this.stepper);\n if (this.operatorListIdx === this.operatorList.argsArray.length) {\n this.running = false;\n if (this.operatorList.lastChunk) {\n this.gfx.endDrawing();\n this.callback();\n }\n }\n }\n\n };\n\n return InternalRenderTask;\n})();\n\n\nvar Metadata = PDFJS.Metadata = (function MetadataClosure() {\n function fixMetadata(meta) {\n return meta.replace(/>\\\\376\\\\377([^<]+)/g, function(all, codes) {\n var bytes = codes.replace(/\\\\([0-3])([0-7])([0-7])/g,\n function(code, d1, d2, d3) {\n return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);\n });\n var chars = '';\n for (var i = 0; i < bytes.length; i += 2) {\n var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);\n chars += code >= 32 && code < 127 && code != 60 && code != 62 &&\n code != 38 && false ? String.fromCharCode(code) :\n '&#x' + (0x10000 + code).toString(16).substring(1) + ';';\n }\n return '>' + chars;\n });\n }\n\n function Metadata(meta) {\n if (typeof meta === 'string') {\n // Ghostscript produces invalid metadata\n meta = fixMetadata(meta);\n\n var parser = new DOMParser();\n meta = parser.parseFromString(meta, 'application/xml');\n } else if (!(meta instanceof Document)) {\n error('Metadata: Invalid metadata object');\n }\n\n this.metaDocument = meta;\n this.metadata = {};\n this.parse();\n }\n\n Metadata.prototype = {\n parse: function Metadata_parse() {\n var doc = this.metaDocument;\n var rdf = doc.documentElement;\n\n if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { // Wrapped in \n rdf = rdf.firstChild;\n while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf')\n rdf = rdf.nextSibling;\n }\n\n var nodeName = (rdf) ? rdf.nodeName.toLowerCase() : null;\n if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes())\n return;\n\n var children = rdf.childNodes, desc, entry, name, i, ii, length, iLength;\n\n for (i = 0, length = children.length; i < length; i++) {\n desc = children[i];\n if (desc.nodeName.toLowerCase() !== 'rdf:description')\n continue;\n\n for (ii = 0, iLength = desc.childNodes.length; ii < iLength; ii++) {\n if (desc.childNodes[ii].nodeName.toLowerCase() !== '#text') {\n entry = desc.childNodes[ii];\n name = entry.nodeName.toLowerCase();\n this.metadata[name] = entry.textContent.trim();\n }\n }\n }\n },\n\n get: function Metadata_get(name) {\n return this.metadata[name] || null;\n },\n\n has: function Metadata_has(name) {\n return typeof this.metadata[name] !== 'undefined';\n }\n };\n\n return Metadata;\n})();\n\n\n// contexts store most of the state we need natively.\n// However, PDF needs a bit more state, which we store here.\n\n// Minimal font size that would be used during canvas fillText operations.\nvar MIN_FONT_SIZE = 16;\n\nvar COMPILE_TYPE3_GLYPHS = true;\n\nfunction createScratchCanvas(width, height) {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nfunction addContextCurrentTransform(ctx) {\n // If the context doesn't expose a `mozCurrentTransform`, add a JS based on.\n if (!ctx.mozCurrentTransform) {\n // Store the original context\n ctx._scaleX = ctx._scaleX || 1.0;\n ctx._scaleY = ctx._scaleY || 1.0;\n ctx._originalSave = ctx.save;\n ctx._originalRestore = ctx.restore;\n ctx._originalRotate = ctx.rotate;\n ctx._originalScale = ctx.scale;\n ctx._originalTranslate = ctx.translate;\n ctx._originalTransform = ctx.transform;\n ctx._originalSetTransform = ctx.setTransform;\n\n ctx._transformMatrix = [ctx._scaleX, 0, 0, ctx._scaleY, 0, 0];\n ctx._transformStack = [];\n\n Object.defineProperty(ctx, 'mozCurrentTransform', {\n get: function getCurrentTransform() {\n return this._transformMatrix;\n }\n });\n\n Object.defineProperty(ctx, 'mozCurrentTransformInverse', {\n get: function getCurrentTransformInverse() {\n // Calculation done using WolframAlpha:\n // http://www.wolframalpha.com/input/?\n // i=Inverse+{{a%2C+c%2C+e}%2C+{b%2C+d%2C+f}%2C+{0%2C+0%2C+1}}\n\n var m = this._transformMatrix;\n var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];\n\n var ad_bc = a * d - b * c;\n var bc_ad = b * c - a * d;\n\n return [\n d / ad_bc,\n b / bc_ad,\n c / bc_ad,\n a / ad_bc,\n (d * e - c * f) / bc_ad,\n (b * e - a * f) / ad_bc\n ];\n }\n });\n\n ctx.save = function ctxSave() {\n var old = this._transformMatrix;\n this._transformStack.push(old);\n this._transformMatrix = old.slice(0, 6);\n\n this._originalSave();\n };\n\n ctx.restore = function ctxRestore() {\n var prev = this._transformStack.pop();\n if (prev) {\n this._transformMatrix = prev;\n this._originalRestore();\n }\n };\n\n ctx.translate = function ctxTranslate(x, y) {\n var m = this._transformMatrix;\n m[4] = m[0] * x + m[2] * y + m[4];\n m[5] = m[1] * x + m[3] * y + m[5];\n\n this._originalTranslate(x, y);\n };\n\n ctx.scale = function ctxScale(x, y) {\n var m = this._transformMatrix;\n m[0] = m[0] * x;\n m[1] = m[1] * x;\n m[2] = m[2] * y;\n m[3] = m[3] * y;\n\n this._originalScale(x, y);\n };\n\n ctx.transform = function ctxTransform(a, b, c, d, e, f) {\n var m = this._transformMatrix;\n this._transformMatrix = [\n m[0] * a + m[2] * b,\n m[1] * a + m[3] * b,\n m[0] * c + m[2] * d,\n m[1] * c + m[3] * d,\n m[0] * e + m[2] * f + m[4],\n m[1] * e + m[3] * f + m[5]\n ];\n\n ctx._originalTransform(a, b, c, d, e, f);\n };\n\n ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\n this._transformMatrix = [a, b, c, d, e, f];\n\n ctx._originalSetTransform(a, b, c, d, e, f);\n };\n\n ctx.rotate = function ctxRotate(angle) {\n var cosValue = Math.cos(angle);\n var sinValue = Math.sin(angle);\n\n var m = this._transformMatrix;\n this._transformMatrix = [\n m[0] * cosValue + m[2] * sinValue,\n m[1] * cosValue + m[3] * sinValue,\n m[0] * (-sinValue) + m[2] * cosValue,\n m[1] * (-sinValue) + m[3] * cosValue,\n m[4],\n m[5]\n ];\n\n this._originalRotate(angle);\n };\n }\n}\n\nvar CachedCanvases = (function CachedCanvasesClosure() {\n var cache = {};\n return {\n getCanvas: function CachedCanvases_getCanvas(id, width, height,\n trackTransform) {\n var canvasEntry;\n if (id in cache) {\n canvasEntry = cache[id];\n canvasEntry.canvas.width = width;\n canvasEntry.canvas.height = height;\n // reset canvas transform for emulated mozCurrentTransform, if needed\n canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);\n } else {\n var canvas = createScratchCanvas(width, height);\n var ctx = canvas.getContext('2d');\n if (trackTransform) {\n addContextCurrentTransform(ctx);\n }\n cache[id] = canvasEntry = {canvas: canvas, context: ctx};\n }\n return canvasEntry;\n },\n clear: function () {\n cache = {};\n }\n };\n})();\n\nfunction compileType3Glyph(imgData) {\n var POINT_TO_PROCESS_LIMIT = 1000;\n\n var width = imgData.width, height = imgData.height;\n var i, j, j0, width1 = width + 1;\n var points = new Uint8Array(width1 * (height + 1));\n var POINT_TYPES =\n new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);\n // finding iteresting points: every point is located between mask pixels,\n // so there will be points of the (width + 1)x(height + 1) grid. Every point\n // will have flags assigned based on neighboring mask pixels:\n // 4 | 8\n // --P--\n // 2 | 1\n // We are interested only in points with the flags:\n // - outside corners: 1, 2, 4, 8;\n // - inside corners: 7, 11, 13, 14;\n // - and, intersections: 5, 10.\n var pos = 3, data = imgData.data, lineSize = width * 4, count = 0;\n if (data[3] !== 0) {\n points[0] = 1;\n ++count;\n }\n for (j = 1; j < width; j++) {\n if (data[pos] !== data[pos + 4]) {\n points[j] = data[pos] ? 2 : 1;\n ++count;\n }\n pos += 4;\n }\n if (data[pos] !== 0) {\n points[j] = 2;\n ++count;\n }\n pos += 4;\n for (i = 1; i < height; i++) {\n j0 = i * width1;\n if (data[pos - lineSize] !== data[pos]) {\n points[j0] = data[pos] ? 1 : 8;\n ++count;\n }\n // 'sum' is the position of the current pixel configuration in the 'TYPES'\n // array (in order 8-1-2-4, so we can use '>>2' to shift the column).\n var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n for (j = 1; j < width; j++) {\n sum = (sum >> 2) + (data[pos + 4] ? 4 : 0) +\n (data[pos - lineSize + 4] ? 8 : 0);\n if (POINT_TYPES[sum]) {\n points[j0 + j] = POINT_TYPES[sum];\n ++count;\n }\n pos += 4;\n }\n if (data[pos - lineSize] !== data[pos]) {\n points[j0 + j] = data[pos] ? 2 : 4;\n ++count;\n }\n pos += 4;\n\n if (count > POINT_TO_PROCESS_LIMIT) {\n return null;\n }\n }\n\n pos -= lineSize;\n j0 = i * width1;\n if (data[pos] !== 0) {\n points[j0] = 8;\n ++count;\n }\n for (j = 1; j < width; j++) {\n if (data[pos] !== data[pos + 4]) {\n points[j0 + j] = data[pos] ? 4 : 8;\n ++count;\n }\n pos += 4;\n }\n if (data[pos] !== 0) {\n points[j0 + j] = 4;\n ++count;\n }\n if (count > POINT_TO_PROCESS_LIMIT) {\n return null;\n }\n\n // building outlines\n var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n var outlines = [];\n for (i = 0; count && i <= height; i++) {\n var p = i * width1;\n var end = p + width;\n while (p < end && !points[p]) {\n p++;\n }\n if (p === end) {\n continue;\n }\n var coords = [p % width1, i];\n\n var type = points[p], p0 = p, pp;\n do {\n var step = steps[type];\n do { p += step; } while (!points[p]);\n\n pp = points[p];\n if (pp !== 5 && pp !== 10) {\n // set new direction\n type = pp;\n // delete mark\n points[p] = 0;\n } else { // type is 5 or 10, ie, a crossing\n // set new direction\n type = pp & ((0x33 * type) >> 4);\n // set new type for \"future hit\"\n points[p] &= (type >> 2 | type << 2);\n }\n\n coords.push(p % width1);\n coords.push((p / width1) | 0);\n --count;\n } while (p0 !== p);\n outlines.push(coords);\n --i;\n }\n\n var drawOutline = function(c) {\n c.save();\n // the path shall be painted in [0..1]x[0..1] space\n c.scale(1 / width, -1 / height);\n c.translate(0, -height);\n c.beginPath();\n for (var i = 0, ii = outlines.length; i < ii; i++) {\n var o = outlines[i];\n c.moveTo(o[0], o[1]);\n for (var j = 2, jj = o.length; j < jj; j += 2) {\n c.lineTo(o[j], o[j+1]);\n }\n }\n c.fill();\n c.beginPath();\n c.restore();\n };\n\n return drawOutline;\n}\n\nvar CanvasExtraState = (function CanvasExtraStateClosure() {\n function CanvasExtraState(old) {\n // Are soft masks and alpha values shapes or opacities?\n this.alphaIsShape = false;\n this.fontSize = 0;\n this.fontSizeScale = 1;\n this.textMatrix = IDENTITY_MATRIX;\n this.fontMatrix = FONT_IDENTITY_MATRIX;\n this.leading = 0;\n // Current point (in user coordinates)\n this.x = 0;\n this.y = 0;\n // Start of text line (in text coordinates)\n this.lineX = 0;\n this.lineY = 0;\n // Character and word spacing\n this.charSpacing = 0;\n this.wordSpacing = 0;\n this.textHScale = 1;\n this.textRenderingMode = TextRenderingMode.FILL;\n this.textRise = 0;\n // Color spaces\n this.fillColorSpace = ColorSpace.singletons.gray;\n this.fillColorSpaceObj = null;\n this.strokeColorSpace = ColorSpace.singletons.gray;\n this.strokeColorSpaceObj = null;\n this.fillColorObj = null;\n this.strokeColorObj = null;\n // Default fore and background colors\n this.fillColor = '#000000';\n this.strokeColor = '#000000';\n // Note: fill alpha applies to all non-stroking operations\n this.fillAlpha = 1;\n this.strokeAlpha = 1;\n this.lineWidth = 1;\n this.paintFormXObjectDepth = 0;\n\n this.old = old;\n }\n\n CanvasExtraState.prototype = {\n clone: function CanvasExtraState_clone() {\n return Object.create(this);\n },\n setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {\n this.x = x;\n this.y = y;\n }\n };\n return CanvasExtraState;\n})();\n\nvar CanvasGraphics = (function CanvasGraphicsClosure() {\n // Defines the time the executeOperatorList is going to be executing\n // before it stops and shedules a continue of execution.\n var EXECUTION_TIME = 15;\n\n function CanvasGraphics(canvasCtx, commonObjs, objs, textLayer, imageLayer) {\n this.ctx = canvasCtx;\n this.current = new CanvasExtraState();\n this.stateStack = [];\n this.pendingClip = null;\n this.pendingEOFill = false;\n this.res = null;\n this.xobjs = null;\n this.commonObjs = commonObjs;\n this.objs = objs;\n this.textLayer = textLayer;\n this.imageLayer = imageLayer;\n this.groupStack = [];\n this.processingType3 = null;\n // Patterns are painted relative to the initial page/form transform, see pdf\n // spec 8.7.2 NOTE 1.\n this.baseTransform = null;\n this.baseTransformStack = [];\n this.groupLevel = 0;\n if (canvasCtx) {\n addContextCurrentTransform(canvasCtx);\n }\n }\n\n function putBinaryImageData(ctx, imgData) {\n if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) {\n ctx.putImageData(imgData, 0, 0);\n return;\n }\n\n var tmpImgData = ctx.createImageData(imgData.width, imgData.height);\n\n var data = imgData.data;\n var tmpImgDataPixels = tmpImgData.data;\n if ('set' in tmpImgDataPixels)\n tmpImgDataPixels.set(data);\n else {\n // Copy over the imageData pixel by pixel.\n for (var i = 0, ii = tmpImgDataPixels.length; i < ii; i++)\n tmpImgDataPixels[i] = data[i];\n }\n\n ctx.putImageData(tmpImgData, 0, 0);\n }\n\n function copyCtxState(sourceCtx, destCtx) {\n var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha',\n 'lineWidth', 'lineCap', 'lineJoin', 'miterLimit',\n 'globalCompositeOperation', 'font'];\n for (var i = 0, ii = properties.length; i < ii; i++) {\n var property = properties[i];\n if (property in sourceCtx) {\n destCtx[property] = sourceCtx[property];\n }\n }\n if ('setLineDash' in sourceCtx) {\n destCtx.setLineDash(sourceCtx.getLineDash());\n destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n } else if ('mozDash' in sourceCtx) {\n destCtx.mozDash = sourceCtx.mozDash;\n destCtx.mozDashOffset = sourceCtx.mozDashOffset;\n }\n }\n\n var LINE_CAP_STYLES = ['butt', 'round', 'square'];\n var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];\n var NORMAL_CLIP = {};\n var EO_CLIP = {};\n\n CanvasGraphics.prototype = {\n\n beginDrawing: function CanvasGraphics_beginDrawing(viewport, transparency) {\n // For pdfs that use blend modes we have to clear the canvas else certain\n // blend modes can look wrong since we'd be blending with a white\n // backdrop. The problem with a transparent backdrop though is we then\n // don't get sub pixel anti aliasing on text, so we fill with white if\n // we can.\n var width = this.ctx.canvas.width;\n var height = this.ctx.canvas.height;\n if (transparency) {\n this.ctx.clearRect(0, 0, width, height);\n } else {\n this.ctx.mozOpaque = true;\n this.ctx.save();\n this.ctx.fillStyle = 'rgb(255, 255, 255)';\n this.ctx.fillRect(0, 0, width, height);\n this.ctx.restore();\n }\n\n var transform = viewport.transform;\n this.baseTransform = transform.slice();\n this.ctx.save();\n this.ctx.transform.apply(this.ctx, transform);\n\n if (this.textLayer) {\n this.textLayer.beginLayout();\n }\n if (this.imageLayer) {\n this.imageLayer.beginLayout();\n }\n },\n\n executeOperatorList: function CanvasGraphics_executeOperatorList(\n operatorList,\n executionStartIdx, continueCallback,\n stepper) {\n var argsArray = operatorList.argsArray;\n var fnArray = operatorList.fnArray;\n var i = executionStartIdx || 0;\n var argsArrayLen = argsArray.length;\n\n // Sometimes the OperatorList to execute is empty.\n if (argsArrayLen == i) {\n return i;\n }\n\n var executionEndIdx;\n var endTime = Date.now() + EXECUTION_TIME;\n\n var commonObjs = this.commonObjs;\n var objs = this.objs;\n var fnId;\n\n while (true) {\n if (stepper && i === stepper.nextBreakPoint) {\n stepper.breakIt(i, continueCallback);\n return i;\n }\n\n fnId = fnArray[i];\n\n if (fnId !== OPS.dependency) {\n this[fnId].apply(this, argsArray[i]);\n } else {\n var deps = argsArray[i];\n for (var n = 0, nn = deps.length; n < nn; n++) {\n var depObjId = deps[n];\n var common = depObjId.substring(0, 2) == 'g_';\n\n // If the promise isn't resolved yet, add the continueCallback\n // to the promise and bail out.\n if (!common && !objs.isResolved(depObjId)) {\n objs.get(depObjId, continueCallback);\n return i;\n }\n if (common && !commonObjs.isResolved(depObjId)) {\n commonObjs.get(depObjId, continueCallback);\n return i;\n }\n }\n }\n\n i++;\n\n // If the entire operatorList was executed, stop as were done.\n if (i == argsArrayLen) {\n return i;\n }\n\n // If the execution took longer then a certain amount of time, schedule\n // to continue exeution after a short delay.\n // However, this is only possible if a 'continueCallback' is passed in.\n if (continueCallback && Date.now() > endTime) {\n setTimeout(continueCallback, 0);\n return i;\n }\n\n // If the operatorList isn't executed completely yet OR the execution\n // time was short enough, do another execution round.\n }\n },\n\n endDrawing: function CanvasGraphics_endDrawing() {\n this.ctx.restore();\n CachedCanvases.clear();\n\n if (this.textLayer) {\n this.textLayer.endLayout();\n }\n if (this.imageLayer) {\n this.imageLayer.endLayout();\n }\n },\n\n // Graphics state\n setLineWidth: function CanvasGraphics_setLineWidth(width) {\n this.current.lineWidth = width;\n this.ctx.lineWidth = width;\n },\n setLineCap: function CanvasGraphics_setLineCap(style) {\n this.ctx.lineCap = LINE_CAP_STYLES[style];\n },\n setLineJoin: function CanvasGraphics_setLineJoin(style) {\n this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n },\n setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {\n this.ctx.miterLimit = limit;\n },\n setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {\n var ctx = this.ctx;\n if ('setLineDash' in ctx) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashPhase;\n } else {\n ctx.mozDash = dashArray;\n ctx.mozDashOffset = dashPhase;\n }\n },\n setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {\n // Maybe if we one day fully support color spaces this will be important\n // for now we can ignore.\n // TODO set rendering intent?\n },\n setFlatness: function CanvasGraphics_setFlatness(flatness) {\n // There's no way to control this with canvas, but we can safely ignore.\n // TODO set flatness?\n },\n setGState: function CanvasGraphics_setGState(states) {\n for (var i = 0, ii = states.length; i < ii; i++) {\n var state = states[i];\n var key = state[0];\n var value = state[1];\n\n switch (key) {\n case 'LW':\n this.setLineWidth(value);\n break;\n case 'LC':\n this.setLineCap(value);\n break;\n case 'LJ':\n this.setLineJoin(value);\n break;\n case 'ML':\n this.setMiterLimit(value);\n break;\n case 'D':\n this.setDash(value[0], value[1]);\n break;\n case 'RI':\n this.setRenderingIntent(value);\n break;\n case 'FL':\n this.setFlatness(value);\n break;\n case 'Font':\n this.setFont(value[0], value[1]);\n break;\n case 'CA':\n this.current.strokeAlpha = state[1];\n break;\n case 'ca':\n this.current.fillAlpha = state[1];\n this.ctx.globalAlpha = state[1];\n break;\n case 'BM':\n if (value && value.name && (value.name !== 'Normal')) {\n var mode = value.name.replace(/([A-Z])/g,\n function(c) {\n return '-' + c.toLowerCase();\n }\n ).substring(1);\n this.ctx.globalCompositeOperation = mode;\n if (this.ctx.globalCompositeOperation !== mode) {\n warn('globalCompositeOperation \"' + mode +\n '\" is not supported');\n }\n } else {\n this.ctx.globalCompositeOperation = 'source-over';\n }\n break;\n }\n }\n },\n save: function CanvasGraphics_save() {\n this.ctx.save();\n var old = this.current;\n this.stateStack.push(old);\n this.current = old.clone();\n },\n restore: function CanvasGraphics_restore() {\n var prev = this.stateStack.pop();\n if (prev) {\n this.current = prev;\n this.ctx.restore();\n }\n },\n transform: function CanvasGraphics_transform(a, b, c, d, e, f) {\n this.ctx.transform(a, b, c, d, e, f);\n },\n\n // Path\n moveTo: function CanvasGraphics_moveTo(x, y) {\n this.ctx.moveTo(x, y);\n this.current.setCurrentPoint(x, y);\n },\n lineTo: function CanvasGraphics_lineTo(x, y) {\n this.ctx.lineTo(x, y);\n this.current.setCurrentPoint(x, y);\n },\n curveTo: function CanvasGraphics_curveTo(x1, y1, x2, y2, x3, y3) {\n this.ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n this.current.setCurrentPoint(x3, y3);\n },\n curveTo2: function CanvasGraphics_curveTo2(x2, y2, x3, y3) {\n var current = this.current;\n this.ctx.bezierCurveTo(current.x, current.y, x2, y2, x3, y3);\n current.setCurrentPoint(x3, y3);\n },\n curveTo3: function CanvasGraphics_curveTo3(x1, y1, x3, y3) {\n this.curveTo(x1, y1, x3, y3, x3, y3);\n this.current.setCurrentPoint(x3, y3);\n },\n closePath: function CanvasGraphics_closePath() {\n this.ctx.closePath();\n },\n rectangle: function CanvasGraphics_rectangle(x, y, width, height) {\n this.ctx.rect(x, y, width, height);\n },\n stroke: function CanvasGraphics_stroke(consumePath) {\n consumePath = typeof consumePath !== 'undefined' ? consumePath : true;\n var ctx = this.ctx;\n var strokeColor = this.current.strokeColor;\n if (this.current.lineWidth === 0)\n ctx.lineWidth = this.getSinglePixelWidth();\n // For stroke we want to temporarily change the global alpha to the\n // stroking alpha.\n ctx.globalAlpha = this.current.strokeAlpha;\n if (strokeColor && strokeColor.hasOwnProperty('type') &&\n strokeColor.type === 'Pattern') {\n // for patterns, we transform to pattern space, calculate\n // the pattern, call stroke, and restore to user space\n ctx.save();\n ctx.strokeStyle = strokeColor.getPattern(ctx, this);\n ctx.stroke();\n ctx.restore();\n } else {\n ctx.stroke();\n }\n if (consumePath)\n this.consumePath();\n // Restore the global alpha to the fill alpha\n ctx.globalAlpha = this.current.fillAlpha;\n },\n closeStroke: function CanvasGraphics_closeStroke() {\n this.closePath();\n this.stroke();\n },\n fill: function CanvasGraphics_fill(consumePath) {\n consumePath = typeof consumePath !== 'undefined' ? consumePath : true;\n var ctx = this.ctx;\n var fillColor = this.current.fillColor;\n var needRestore = false;\n\n if (fillColor && fillColor.hasOwnProperty('type') &&\n fillColor.type === 'Pattern') {\n ctx.save();\n ctx.fillStyle = fillColor.getPattern(ctx, this);\n needRestore = true;\n }\n\n if (this.pendingEOFill) {\n if ('mozFillRule' in this.ctx) {\n this.ctx.mozFillRule = 'evenodd';\n this.ctx.fill();\n this.ctx.mozFillRule = 'nonzero';\n } else {\n try {\n this.ctx.fill('evenodd');\n } catch (ex) {\n // shouldn't really happen, but browsers might think differently\n this.ctx.fill();\n }\n }\n this.pendingEOFill = false;\n } else {\n this.ctx.fill();\n }\n\n if (needRestore) {\n ctx.restore();\n }\n if (consumePath) {\n this.consumePath();\n }\n },\n eoFill: function CanvasGraphics_eoFill() {\n this.pendingEOFill = true;\n this.fill();\n },\n fillStroke: function CanvasGraphics_fillStroke() {\n this.fill(false);\n this.stroke(false);\n\n this.consumePath();\n },\n eoFillStroke: function CanvasGraphics_eoFillStroke() {\n this.pendingEOFill = true;\n this.fillStroke();\n },\n closeFillStroke: function CanvasGraphics_closeFillStroke() {\n this.closePath();\n this.fillStroke();\n },\n closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {\n this.pendingEOFill = true;\n this.closePath();\n this.fillStroke();\n },\n endPath: function CanvasGraphics_endPath() {\n this.consumePath();\n },\n\n // Clipping\n clip: function CanvasGraphics_clip() {\n this.pendingClip = NORMAL_CLIP;\n },\n eoClip: function CanvasGraphics_eoClip() {\n this.pendingClip = EO_CLIP;\n },\n\n // Text\n beginText: function CanvasGraphics_beginText() {\n this.current.textMatrix = IDENTITY_MATRIX;\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n },\n endText: function CanvasGraphics_endText() {\n if (!('pendingTextPaths' in this)) {\n this.ctx.beginPath();\n return;\n }\n var paths = this.pendingTextPaths;\n var ctx = this.ctx;\n\n ctx.save();\n ctx.beginPath();\n for (var i = 0; i < paths.length; i++) {\n var path = paths[i];\n ctx.setTransform.apply(ctx, path.transform);\n ctx.translate(path.x, path.y);\n path.addToPath(ctx, path.fontSize);\n }\n ctx.restore();\n ctx.clip();\n ctx.beginPath();\n delete this.pendingTextPaths;\n },\n setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {\n this.current.charSpacing = spacing;\n },\n setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {\n this.current.wordSpacing = spacing;\n },\n setHScale: function CanvasGraphics_setHScale(scale) {\n this.current.textHScale = scale / 100;\n },\n setLeading: function CanvasGraphics_setLeading(leading) {\n this.current.leading = -leading;\n },\n setFont: function CanvasGraphics_setFont(fontRefName, size) {\n var fontObj = this.commonObjs.get(fontRefName);\n var current = this.current;\n\n if (!fontObj)\n error('Can\\'t find font for ' + fontRefName);\n\n current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix :\n FONT_IDENTITY_MATRIX;\n\n // A valid matrix needs all main diagonal elements to be non-zero\n // This also ensures we bypass FF bugzilla bug #719844.\n if (current.fontMatrix[0] === 0 ||\n current.fontMatrix[3] === 0) {\n warn('Invalid font matrix for font ' + fontRefName);\n }\n\n // The spec for Tf (setFont) says that 'size' specifies the font 'scale',\n // and in some docs this can be negative (inverted x-y axes).\n if (size < 0) {\n size = -size;\n current.fontDirection = -1;\n } else {\n current.fontDirection = 1;\n }\n\n this.current.font = fontObj;\n this.current.fontSize = size;\n\n if (fontObj.coded)\n return; // we don't need ctx.font for Type3 fonts\n\n var name = fontObj.loadedName || 'sans-serif';\n var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :\n (fontObj.bold ? 'bold' : 'normal');\n\n var italic = fontObj.italic ? 'italic' : 'normal';\n var typeface = '\"' + name + '\", ' + fontObj.fallbackName;\n\n // Some font backends cannot handle fonts below certain size.\n // Keeping the font at minimal size and using the fontSizeScale to change\n // the current transformation matrix before the fillText/strokeText.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227\n var browserFontSize = size >= MIN_FONT_SIZE ? size : MIN_FONT_SIZE;\n this.current.fontSizeScale = browserFontSize != MIN_FONT_SIZE ? 1.0 :\n size / MIN_FONT_SIZE;\n\n var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface;\n this.ctx.font = rule;\n },\n setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {\n this.current.textRenderingMode = mode;\n },\n setTextRise: function CanvasGraphics_setTextRise(rise) {\n this.current.textRise = rise;\n },\n moveText: function CanvasGraphics_moveText(x, y) {\n this.current.x = this.current.lineX += x;\n this.current.y = this.current.lineY += y;\n },\n setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {\n this.setLeading(-y);\n this.moveText(x, y);\n },\n setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {\n this.current.textMatrix = [a, b, c, d, e, f];\n\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n },\n nextLine: function CanvasGraphics_nextLine() {\n this.moveText(0, this.current.leading);\n },\n applyTextTransforms: function CanvasGraphics_applyTextTransforms() {\n var ctx = this.ctx;\n var current = this.current;\n ctx.transform.apply(ctx, current.textMatrix);\n ctx.translate(current.x, current.y + current.textRise);\n if (current.fontDirection > 0) {\n ctx.scale(current.textHScale, -1);\n } else {\n ctx.scale(-current.textHScale, 1);\n }\n },\n createTextGeometry: function CanvasGraphics_createTextGeometry() {\n var geometry = {};\n var ctx = this.ctx;\n var font = this.current.font;\n var ctxMatrix = ctx.mozCurrentTransform;\n var a = ctxMatrix[0], b = ctxMatrix[1], c = ctxMatrix[2];\n var d = ctxMatrix[3], e = ctxMatrix[4], f = ctxMatrix[5];\n var sx = (a >= 0) ?\n Math.sqrt((a * a) + (b * b)) : -Math.sqrt((a * a) + (b * b));\n var sy = (d >= 0) ?\n Math.sqrt((c * c) + (d * d)) : -Math.sqrt((c * c) + (d * d));\n var angle = Math.atan2(b, a);\n var x = e;\n var y = f;\n geometry.x = x;\n geometry.y = y;\n geometry.hScale = sx;\n geometry.vScale = sy;\n geometry.angle = angle;\n geometry.spaceWidth = font.spaceWidth;\n geometry.fontName = font.loadedName;\n geometry.fontFamily = font.fallbackName;\n geometry.fontSize = this.current.fontSize;\n return geometry;\n },\n\n paintChar: function (character, x, y) {\n var ctx = this.ctx;\n var current = this.current;\n var font = current.font;\n var fontSize = current.fontSize / current.fontSizeScale;\n var textRenderingMode = current.textRenderingMode;\n var fillStrokeMode = textRenderingMode &\n TextRenderingMode.FILL_STROKE_MASK;\n var isAddToPathSet = !!(textRenderingMode &\n TextRenderingMode.ADD_TO_PATH_FLAG);\n\n var addToPath;\n if (font.disableFontFace || isAddToPathSet) {\n addToPath = font.getPathGenerator(this.commonObjs, character);\n }\n\n if (font.disableFontFace) {\n ctx.save();\n ctx.translate(x, y);\n ctx.beginPath();\n addToPath(ctx, fontSize);\n if (fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n ctx.fill();\n }\n if (fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n ctx.stroke();\n }\n ctx.restore();\n } else {\n if (fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n ctx.fillText(character, x, y);\n }\n if (fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n ctx.strokeText(character, x, y);\n }\n }\n\n if (isAddToPathSet) {\n var paths = this.pendingTextPaths || (this.pendingTextPaths = []);\n paths.push({\n transform: ctx.mozCurrentTransform,\n x: x,\n y: y,\n fontSize: fontSize,\n addToPath: addToPath\n });\n }\n },\n\n showText: function CanvasGraphics_showText(glyphs, skipTextSelection) {\n var ctx = this.ctx;\n var current = this.current;\n var font = current.font;\n var fontSize = current.fontSize;\n var fontSizeScale = current.fontSizeScale;\n var charSpacing = current.charSpacing;\n var wordSpacing = current.wordSpacing;\n var textHScale = current.textHScale * current.fontDirection;\n var fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n var glyphsLength = glyphs.length;\n var textLayer = this.textLayer;\n var geom;\n var textSelection = textLayer && !skipTextSelection ? true : false;\n var canvasWidth = 0.0;\n var vertical = font.vertical;\n var defaultVMetrics = font.defaultVMetrics;\n\n // Type3 fonts - each glyph is a \"mini-PDF\"\n if (font.coded) {\n ctx.save();\n ctx.transform.apply(ctx, current.textMatrix);\n ctx.translate(current.x, current.y);\n\n ctx.scale(textHScale, 1);\n\n if (textSelection) {\n this.save();\n ctx.scale(1, -1);\n geom = this.createTextGeometry();\n this.restore();\n }\n for (var i = 0; i < glyphsLength; ++i) {\n\n var glyph = glyphs[i];\n if (glyph === null) {\n // word break\n this.ctx.translate(wordSpacing, 0);\n current.x += wordSpacing * textHScale;\n continue;\n }\n\n this.processingType3 = glyph;\n this.save();\n ctx.scale(fontSize, fontSize);\n ctx.transform.apply(ctx, fontMatrix);\n this.executeOperatorList(glyph.operatorList);\n this.restore();\n\n var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);\n var width = (transformed[0] * fontSize + charSpacing) *\n current.fontDirection;\n\n ctx.translate(width, 0);\n current.x += width * textHScale;\n\n canvasWidth += width;\n }\n ctx.restore();\n this.processingType3 = null;\n } else {\n ctx.save();\n this.applyTextTransforms();\n\n var lineWidth = current.lineWidth;\n var a1 = current.textMatrix[0], b1 = current.textMatrix[1];\n var scale = Math.sqrt(a1 * a1 + b1 * b1);\n if (scale === 0 || lineWidth === 0)\n lineWidth = this.getSinglePixelWidth();\n else\n lineWidth /= scale;\n\n if (textSelection)\n geom = this.createTextGeometry();\n\n if (fontSizeScale != 1.0) {\n ctx.scale(fontSizeScale, fontSizeScale);\n lineWidth /= fontSizeScale;\n }\n\n ctx.lineWidth = lineWidth;\n\n var x = 0;\n for (var i = 0; i < glyphsLength; ++i) {\n var glyph = glyphs[i];\n if (glyph === null) {\n // word break\n x += current.fontDirection * wordSpacing;\n continue;\n }\n\n var restoreNeeded = false;\n var character = glyph.fontChar;\n var vmetric = glyph.vmetric || defaultVMetrics;\n if (vertical) {\n var vx = glyph.vmetric ? vmetric[1] : glyph.width * 0.5;\n vx = -vx * fontSize * current.fontMatrix[0];\n var vy = vmetric[2] * fontSize * current.fontMatrix[0];\n }\n var width = vmetric ? -vmetric[0] : glyph.width;\n var charWidth = width * fontSize * current.fontMatrix[0] +\n charSpacing * current.fontDirection;\n var accent = glyph.accent;\n\n var scaledX, scaledY, scaledAccentX, scaledAccentY;\n if (!glyph.disabled) {\n if (vertical) {\n scaledX = vx / fontSizeScale;\n scaledY = (x + vy) / fontSizeScale;\n } else {\n scaledX = x / fontSizeScale;\n scaledY = 0;\n }\n\n if (font.remeasure && width > 0) {\n // some standard fonts may not have the exact width, trying to\n // rescale per character\n var measuredWidth = ctx.measureText(character).width * 1000 /\n current.fontSize * current.fontSizeScale;\n var characterScaleX = width / measuredWidth;\n restoreNeeded = true;\n ctx.save();\n ctx.scale(characterScaleX, 1);\n scaledX /= characterScaleX;\n if (accent) {\n scaledAccentX /= characterScaleX;\n }\n }\n\n this.paintChar(character, scaledX, scaledY);\n if (accent) {\n scaledAccentX = scaledX + accent.offset.x / fontSizeScale;\n scaledAccentY = scaledY - accent.offset.y / fontSizeScale;\n this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY);\n }\n }\n\n x += charWidth;\n\n canvasWidth += charWidth;\n\n if (restoreNeeded) {\n ctx.restore();\n }\n }\n if (vertical) {\n current.y -= x * textHScale;\n } else {\n current.x += x * textHScale;\n }\n ctx.restore();\n }\n\n if (textSelection) {\n geom.canvasWidth = canvasWidth;\n if (vertical) {\n var VERTICAL_TEXT_ROTATION = Math.PI / 2;\n geom.angle += VERTICAL_TEXT_ROTATION;\n }\n this.textLayer.appendText(geom);\n }\n\n return canvasWidth;\n },\n showSpacedText: function CanvasGraphics_showSpacedText(arr) {\n var ctx = this.ctx;\n var current = this.current;\n var font = current.font;\n var fontSize = current.fontSize;\n // TJ array's number is independent from fontMatrix\n var textHScale = current.textHScale * 0.001 * current.fontDirection;\n var arrLength = arr.length;\n var textLayer = this.textLayer;\n var geom;\n var canvasWidth = 0.0;\n var textSelection = textLayer ? true : false;\n var vertical = font.vertical;\n var spacingAccumulator = 0;\n\n if (textSelection) {\n ctx.save();\n this.applyTextTransforms();\n geom = this.createTextGeometry();\n ctx.restore();\n }\n\n for (var i = 0; i < arrLength; ++i) {\n var e = arr[i];\n if (isNum(e)) {\n var spacingLength = -e * fontSize * textHScale;\n if (vertical) {\n current.y += spacingLength;\n } else {\n current.x += spacingLength;\n }\n\n if (textSelection)\n spacingAccumulator += spacingLength;\n } else {\n var shownCanvasWidth = this.showText(e, true);\n\n if (textSelection) {\n canvasWidth += spacingAccumulator + shownCanvasWidth;\n spacingAccumulator = 0;\n }\n }\n }\n\n if (textSelection) {\n geom.canvasWidth = canvasWidth;\n if (vertical) {\n var VERTICAL_TEXT_ROTATION = Math.PI / 2;\n geom.angle += VERTICAL_TEXT_ROTATION;\n }\n this.textLayer.appendText(geom);\n }\n },\n nextLineShowText: function CanvasGraphics_nextLineShowText(text) {\n this.nextLine();\n this.showText(text);\n },\n nextLineSetSpacingShowText:\n function CanvasGraphics_nextLineSetSpacingShowText(wordSpacing,\n charSpacing,\n text) {\n this.setWordSpacing(wordSpacing);\n this.setCharSpacing(charSpacing);\n this.nextLineShowText(text);\n },\n\n // Type3 fonts\n setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {\n // We can safely ignore this since the width should be the same\n // as the width in the Widths array.\n },\n setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth,\n yWidth,\n llx,\n lly,\n urx,\n ury) {\n // TODO According to the spec we're also suppose to ignore any operators\n // that set color or include images while processing this type3 font.\n this.rectangle(llx, lly, urx - llx, ury - lly);\n this.clip();\n this.endPath();\n },\n\n // Color\n setStrokeColorSpace: function CanvasGraphics_setStrokeColorSpace(raw) {\n this.current.strokeColorSpace = ColorSpace.fromIR(raw);\n },\n setFillColorSpace: function CanvasGraphics_setFillColorSpace(raw) {\n this.current.fillColorSpace = ColorSpace.fromIR(raw);\n },\n setStrokeColor: function CanvasGraphics_setStrokeColor(/*...*/) {\n var cs = this.current.strokeColorSpace;\n var rgbColor = cs.getRgb(arguments, 0);\n var color = Util.makeCssRgb(rgbColor);\n this.ctx.strokeStyle = color;\n this.current.strokeColor = color;\n },\n getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR, cs) {\n if (IR[0] == 'TilingPattern') {\n var args = IR[1];\n var base = cs.base;\n var color;\n if (base) {\n var baseComps = base.numComps;\n\n color = base.getRgb(args, 0);\n }\n var pattern = new TilingPattern(IR, color, this.ctx, this.objs,\n this.commonObjs, this.baseTransform);\n } else if (IR[0] == 'RadialAxial' || IR[0] == 'Dummy') {\n var pattern = Pattern.shadingFromIR(IR);\n } else {\n error('Unkown IR type ' + IR[0]);\n }\n return pattern;\n },\n setStrokeColorN: function CanvasGraphics_setStrokeColorN(/*...*/) {\n var cs = this.current.strokeColorSpace;\n\n if (cs.name == 'Pattern') {\n this.current.strokeColor = this.getColorN_Pattern(arguments, cs);\n } else {\n this.setStrokeColor.apply(this, arguments);\n }\n },\n setFillColor: function CanvasGraphics_setFillColor(/*...*/) {\n var cs = this.current.fillColorSpace;\n var rgbColor = cs.getRgb(arguments, 0);\n var color = Util.makeCssRgb(rgbColor);\n this.ctx.fillStyle = color;\n this.current.fillColor = color;\n },\n setFillColorN: function CanvasGraphics_setFillColorN(/*...*/) {\n var cs = this.current.fillColorSpace;\n\n if (cs.name == 'Pattern') {\n this.current.fillColor = this.getColorN_Pattern(arguments, cs);\n } else {\n this.setFillColor.apply(this, arguments);\n }\n },\n setStrokeGray: function CanvasGraphics_setStrokeGray(gray) {\n this.current.strokeColorSpace = ColorSpace.singletons.gray;\n\n var rgbColor = this.current.strokeColorSpace.getRgb(arguments, 0);\n var color = Util.makeCssRgb(rgbColor);\n this.ctx.strokeStyle = color;\n this.current.strokeColor = color;\n },\n setFillGray: function CanvasGraphics_setFillGray(gray) {\n this.current.fillColorSpace = ColorSpace.singletons.gray;\n\n var rgbColor = this.current.fillColorSpace.getRgb(arguments, 0);\n var color = Util.makeCssRgb(rgbColor);\n this.ctx.fillStyle = color;\n this.current.fillColor = color;\n },\n setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {\n this.current.strokeColorSpace = ColorSpace.singletons.rgb;\n\n var rgbColor = this.current.strokeColorSpace.getRgb(arguments, 0);\n var color = Util.makeCssRgb(rgbColor);\n this.ctx.strokeStyle = color;\n this.current.strokeColor = color;\n },\n setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {\n this.current.fillColorSpace = ColorSpace.singletons.rgb;\n\n var rgbColor = this.current.fillColorSpace.getRgb(arguments, 0);\n var color = Util.makeCssRgb(rgbColor);\n this.ctx.fillStyle = color;\n this.current.fillColor = color;\n },\n setStrokeCMYKColor: function CanvasGraphics_setStrokeCMYKColor(c, m, y, k) {\n this.current.strokeColorSpace = ColorSpace.singletons.cmyk;\n\n var color = Util.makeCssCmyk(arguments);\n this.ctx.strokeStyle = color;\n this.current.strokeColor = color;\n },\n setFillCMYKColor: function CanvasGraphics_setFillCMYKColor(c, m, y, k) {\n this.current.fillColorSpace = ColorSpace.singletons.cmyk;\n\n var color = Util.makeCssCmyk(arguments);\n this.ctx.fillStyle = color;\n this.current.fillColor = color;\n },\n\n shadingFill: function CanvasGraphics_shadingFill(patternIR) {\n var ctx = this.ctx;\n\n this.save();\n var pattern = Pattern.shadingFromIR(patternIR);\n ctx.fillStyle = pattern.getPattern(ctx, this);\n\n var inv = ctx.mozCurrentTransformInverse;\n if (inv) {\n var canvas = ctx.canvas;\n var width = canvas.width;\n var height = canvas.height;\n\n var bl = Util.applyTransform([0, 0], inv);\n var br = Util.applyTransform([0, height], inv);\n var ul = Util.applyTransform([width, 0], inv);\n var ur = Util.applyTransform([width, height], inv);\n\n var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\n var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\n var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\n var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\n\n this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n } else {\n // HACK to draw the gradient onto an infinite rectangle.\n // PDF gradients are drawn across the entire image while\n // Canvas only allows gradients to be drawn in a rectangle\n // The following bug should allow us to remove this.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=664884\n\n this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n }\n\n this.restore();\n },\n\n // Images\n beginInlineImage: function CanvasGraphics_beginInlineImage() {\n error('Should not call beginInlineImage');\n },\n beginImageData: function CanvasGraphics_beginImageData() {\n error('Should not call beginImageData');\n },\n\n paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix,\n bbox) {\n this.save();\n this.current.paintFormXObjectDepth++;\n this.baseTransformStack.push(this.baseTransform);\n\n if (matrix && isArray(matrix) && 6 == matrix.length)\n this.transform.apply(this, matrix);\n\n this.baseTransform = this.ctx.mozCurrentTransform;\n\n if (bbox && isArray(bbox) && 4 == bbox.length) {\n var width = bbox[2] - bbox[0];\n var height = bbox[3] - bbox[1];\n this.rectangle(bbox[0], bbox[1], width, height);\n this.clip();\n this.endPath();\n }\n },\n\n paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {\n var depth = this.current.paintFormXObjectDepth;\n do {\n this.restore();\n // some pdf don't close all restores inside object\n // closing those for them\n } while (this.current.paintFormXObjectDepth >= depth);\n this.baseTransform = this.baseTransformStack.pop();\n },\n\n beginGroup: function CanvasGraphics_beginGroup(group) {\n this.save();\n var currentCtx = this.ctx;\n // TODO non-isolated groups - according to Rik at adobe non-isolated\n // group results aren't usually that different and they even have tools\n // that ignore this setting. Notes from Rik on implmenting:\n // - When you encounter an transparency group, create a new canvas with\n // the dimensions of the bbox\n // - copy the content from the previous canvas to the new canvas\n // - draw as usual\n // - remove the backdrop alpha:\n // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha\n // value of your transparency group and 'alphaBackdrop' the alpha of the\n // backdrop\n // - remove background color:\n // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)\n if (!group.isolated) {\n info('TODO: Support non-isolated groups.');\n }\n\n // TODO knockout - supposedly possible with the clever use of compositing\n // modes.\n if (group.knockout) {\n TODO('Support knockout groups.');\n }\n\n var currentTransform = currentCtx.mozCurrentTransform;\n if (group.matrix) {\n currentCtx.transform.apply(currentCtx, group.matrix);\n }\n assert(group.bbox, 'Bounding box is required.');\n\n // Based on the current transform figure out how big the bounding box\n // will actually be.\n var bounds = Util.getAxialAlignedBoundingBox(\n group.bbox,\n currentCtx.mozCurrentTransform);\n // Clip the bounding box to the current canvas.\n var canvasBounds = [0,\n 0,\n currentCtx.canvas.width,\n currentCtx.canvas.height];\n bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n // Use ceil in case we're between sizes so we don't create canvas that is\n // too small and make the canvas at least 1x1 pixels.\n var drawnWidth = Math.max(Math.ceil(bounds[2] - bounds[0]), 1);\n var drawnHeight = Math.max(Math.ceil(bounds[3] - bounds[1]), 1);\n\n var scratchCanvas = CachedCanvases.getCanvas(\n 'groupAt' + this.groupLevel, drawnWidth, drawnHeight, true);\n var groupCtx = scratchCanvas.context;\n // Since we created a new canvas that is just the size of the bounding box\n // we have to translate the group ctx.\n var offsetX = bounds[0];\n var offsetY = bounds[1];\n groupCtx.translate(-offsetX, -offsetY);\n groupCtx.transform.apply(groupCtx, currentTransform);\n\n // Setup the current ctx so when the group is popped we draw it the right\n // location.\n currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n currentCtx.translate(offsetX, offsetY);\n // The transparency group inherits all off the current graphics state\n // except the blend mode, soft mask, and alpha constants.\n copyCtxState(currentCtx, groupCtx);\n this.ctx = groupCtx;\n this.setGState([\n ['SMask', 'None'],\n ['BM', 'Normal'],\n ['ca', 1],\n ['CA', 1]\n ]);\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n },\n\n endGroup: function CanvasGraphics_endGroup(group) {\n this.groupLevel--;\n var groupCtx = this.ctx;\n this.ctx = this.groupStack.pop();\n // Turn off image smoothing to avoid sub pixel interpolation which can\n // look kind of blurry for some pdfs.\n if ('imageSmoothingEnabled' in this.ctx) {\n this.ctx.imageSmoothingEnabled = false;\n } else {\n this.ctx.mozImageSmoothingEnabled = false;\n }\n this.ctx.drawImage(groupCtx.canvas, 0, 0);\n this.restore();\n },\n\n beginAnnotations: function CanvasGraphics_beginAnnotations() {\n this.save();\n this.current = new CanvasExtraState();\n },\n\n endAnnotations: function CanvasGraphics_endAnnotations() {\n this.restore();\n },\n\n beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform,\n matrix) {\n this.save();\n\n if (rect && isArray(rect) && 4 == rect.length) {\n var width = rect[2] - rect[0];\n var height = rect[3] - rect[1];\n this.rectangle(rect[0], rect[1], width, height);\n this.clip();\n this.endPath();\n }\n\n this.transform.apply(this, transform);\n this.transform.apply(this, matrix);\n },\n\n endAnnotation: function CanvasGraphics_endAnnotation() {\n this.restore();\n },\n\n paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) {\n var domImage = this.objs.get(objId);\n if (!domImage) {\n error('Dependent image isn\\'t ready yet');\n }\n\n this.save();\n\n var ctx = this.ctx;\n // scale the image to the unit square\n ctx.scale(1 / w, -1 / h);\n\n ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height,\n 0, -h, w, h);\n if (this.imageLayer) {\n var currentTransform = ctx.mozCurrentTransformInverse;\n var position = this.getCanvasPosition(0, 0);\n this.imageLayer.appendImage({\n objId: objId,\n left: position[0],\n top: position[1],\n width: w / currentTransform[0],\n height: h / currentTransform[3]\n });\n }\n this.restore();\n },\n\n paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {\n var ctx = this.ctx;\n var width = img.width, height = img.height;\n\n var glyph = this.processingType3;\n\n if (COMPILE_TYPE3_GLYPHS && glyph && !('compiled' in glyph)) {\n var MAX_SIZE_TO_COMPILE = 1000;\n if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {\n glyph.compiled =\n compileType3Glyph({data: img.data, width: width, height: height});\n } else {\n glyph.compiled = null;\n }\n }\n\n if (glyph && glyph.compiled) {\n glyph.compiled(ctx);\n return;\n }\n\n var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);\n var maskCtx = maskCanvas.context;\n maskCtx.save();\n\n putBinaryImageData(maskCtx, img);\n\n maskCtx.globalCompositeOperation = 'source-in';\n\n var fillColor = this.current.fillColor;\n maskCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&\n fillColor.type === 'Pattern') ?\n fillColor.getPattern(maskCtx, this) : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n\n maskCtx.restore();\n\n this.paintInlineImageXObject(maskCanvas.canvas);\n },\n\n paintImageMaskXObjectGroup:\n function CanvasGraphics_paintImageMaskXObjectGroup(images) {\n var ctx = this.ctx;\n\n for (var i = 0, ii = images.length; i < ii; i++) {\n var image = images[i];\n var width = image.width, height = image.height;\n\n var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);\n var maskCtx = maskCanvas.context;\n maskCtx.save();\n\n putBinaryImageData(maskCtx, image);\n\n maskCtx.globalCompositeOperation = 'source-in';\n\n var fillColor = this.current.fillColor;\n maskCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&\n fillColor.type === 'Pattern') ?\n fillColor.getPattern(maskCtx, this) : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n\n maskCtx.restore();\n\n ctx.save();\n ctx.transform.apply(ctx, image.transform);\n ctx.scale(1, -1);\n ctx.drawImage(maskCanvas.canvas, 0, 0, width, height,\n 0, -1, 1, 1);\n ctx.restore();\n }\n },\n\n paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {\n var imgData = this.objs.get(objId);\n if (!imgData)\n error('Dependent image isn\\'t ready yet');\n\n this.paintInlineImageXObject(imgData);\n },\n\n paintInlineImageXObject:\n function CanvasGraphics_paintInlineImageXObject(imgData) {\n var width = imgData.width;\n var height = imgData.height;\n var ctx = this.ctx;\n\n this.save();\n // scale the image to the unit square\n ctx.scale(1 / width, -1 / height);\n\n var currentTransform = ctx.mozCurrentTransformInverse;\n var a = currentTransform[0], b = currentTransform[1];\n var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);\n var c = currentTransform[2], d = currentTransform[3];\n var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);\n\n var imgToPaint;\n // instanceof HTMLElement does not work in jsdom node.js module\n if (imgData instanceof HTMLElement || !imgData.data) {\n imgToPaint = imgData;\n } else {\n var tmpCanvas = CachedCanvases.getCanvas('inlineImage', width, height);\n var tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = tmpCanvas.canvas;\n }\n\n var paintWidth = width, paintHeight = height;\n var tmpCanvasId = 'prescale1';\n // Vertial or horizontal scaling shall not be more than 2 to not loose the\n // pixels during drawImage operation, painting on the temporary canvas(es)\n // that are twice smaller in size\n while ((widthScale > 2 && paintWidth > 1) ||\n (heightScale > 2 && paintHeight > 1)) {\n var newWidth = paintWidth, newHeight = paintHeight;\n if (widthScale > 2 && paintWidth > 1) {\n newWidth = Math.ceil(paintWidth / 2);\n widthScale /= paintWidth / newWidth;\n }\n if (heightScale > 2 && paintHeight > 1) {\n newHeight = Math.ceil(paintHeight / 2);\n heightScale /= paintHeight / newHeight;\n }\n var tmpCanvas = CachedCanvases.getCanvas(tmpCanvasId,\n newWidth, newHeight);\n tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, newWidth, newHeight);\n tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight,\n 0, 0, newWidth, newHeight);\n imgToPaint = tmpCanvas.canvas;\n paintWidth = newWidth;\n paintHeight = newHeight;\n tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1';\n }\n ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight,\n 0, -height, width, height);\n\n if (this.imageLayer) {\n var position = this.getCanvasPosition(0, -height);\n this.imageLayer.appendImage({\n imgData: imgData,\n left: position[0],\n top: position[1],\n width: width / currentTransform[0],\n height: height / currentTransform[3]\n });\n }\n this.restore();\n },\n\n paintInlineImageXObjectGroup:\n function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {\n var ctx = this.ctx;\n var w = imgData.width;\n var h = imgData.height;\n\n var tmpCanvas = CachedCanvases.getCanvas('inlineImage', w, h);\n var tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n\n for (var i = 0, ii = map.length; i < ii; i++) {\n var entry = map[i];\n ctx.save();\n ctx.transform.apply(ctx, entry.transform);\n ctx.scale(1, -1);\n ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h,\n 0, -1, 1, 1);\n if (this.imageLayer) {\n var position = this.getCanvasPosition(entry.x, entry.y);\n this.imageLayer.appendImage({\n imgData: imgData,\n left: position[0],\n top: position[1],\n width: w,\n height: h\n });\n }\n ctx.restore();\n }\n },\n\n // Marked content\n\n markPoint: function CanvasGraphics_markPoint(tag) {\n // TODO Marked content.\n },\n markPointProps: function CanvasGraphics_markPointProps(tag, properties) {\n // TODO Marked content.\n },\n beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {\n // TODO Marked content.\n },\n beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(\n tag, properties) {\n // TODO Marked content.\n },\n endMarkedContent: function CanvasGraphics_endMarkedContent() {\n // TODO Marked content.\n },\n\n // Compatibility\n\n beginCompat: function CanvasGraphics_beginCompat() {\n // TODO ignore undefined operators (should we do that anyway?)\n },\n endCompat: function CanvasGraphics_endCompat() {\n // TODO stop ignoring undefined operators\n },\n\n // Helper functions\n\n consumePath: function CanvasGraphics_consumePath() {\n if (this.pendingClip) {\n if (this.pendingClip == EO_CLIP) {\n if ('mozFillRule' in this.ctx) {\n this.ctx.mozFillRule = 'evenodd';\n this.ctx.clip();\n this.ctx.mozFillRule = 'nonzero';\n } else {\n try {\n this.ctx.clip('evenodd');\n } catch (ex) {\n // shouldn't really happen, but browsers might think differently\n this.ctx.clip();\n }\n }\n } else {\n this.ctx.clip();\n }\n this.pendingClip = null;\n }\n this.ctx.beginPath();\n },\n getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) {\n var inverse = this.ctx.mozCurrentTransformInverse;\n // max of the current horizontal and vertical scale\n return Math.sqrt(Math.max(\n (inverse[0] * inverse[0] + inverse[1] * inverse[1]),\n (inverse[2] * inverse[2] + inverse[3] * inverse[3])));\n },\n getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {\n var transform = this.ctx.mozCurrentTransform;\n return [\n transform[0] * x + transform[2] * y + transform[4],\n transform[1] * x + transform[3] * y + transform[5]\n ];\n }\n };\n\n for (var op in OPS) {\n CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n }\n\n return CanvasGraphics;\n})();\n\n\n\nPDFJS.disableFontFace = false;\n\nvar FontLoader = {\n insertRule: function fontLoaderInsertRule(rule) {\n var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG');\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = 'PDFJS_FONT_STYLE_TAG';\n document.documentElement.getElementsByTagName('head')[0].appendChild(\n styleElement);\n }\n\n var styleSheet = styleElement.sheet;\n styleSheet.insertRule(rule, styleSheet.cssRules.length);\n },\n clear: function fontLoaderClear() {\n var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG');\n if (styleElement) {\n styleElement.parentNode.removeChild(styleElement);\n }\n },\n get loadTestFont() {\n // This is a CFF font with 1 glyph for '.' that fills its entire width and\n // height.\n return shadow(this, 'loadTestFont', atob(\n 'T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' +\n 'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' +\n 'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' +\n 'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' +\n 'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' +\n 'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' +\n 'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' +\n 'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' +\n 'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' +\n 'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' +\n 'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' +\n 'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' +\n 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' +\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' +\n 'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' +\n 'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' +\n 'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' +\n 'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' +\n 'ABAAAAAAAAAAAD6AAAAAAAAA=='\n ));\n },\n\n loadTestFontId: 0,\n\n loadingContext: {\n requests: [],\n nextRequestId: 0\n },\n\n isSyncFontLoadingSupported: (function detectSyncFontLoadingSupport() {\n if (isWorker)\n return false;\n\n // User agent string sniffing is bad, but there is no reliable way to tell\n // if font is fully loaded and ready to be used with canvas.\n var userAgent = window.navigator.userAgent;\n var m = /Mozilla\\/5.0.*?rv:(\\d+).*? Gecko/.exec(userAgent);\n if (m && m[1] >= 14)\n return true;\n // TODO other browsers\n return false;\n })(),\n\n bind: function fontLoaderBind(fonts, callback) {\n assert(!isWorker, 'bind() shall be called from main thread');\n\n var rules = [], fontsToLoad = [];\n for (var i = 0, ii = fonts.length; i < ii; i++) {\n var font = fonts[i];\n\n // Add the font to the DOM only once or skip if the font\n // is already loaded.\n if (font.attached || font.loading === false) {\n continue;\n }\n font.attached = true;\n\n var rule = font.bindDOM();\n if (rule) {\n rules.push(rule);\n fontsToLoad.push(font);\n }\n }\n\n var request = FontLoader.queueLoadingCallback(callback);\n if (rules.length > 0 && !this.isSyncFontLoadingSupported) {\n FontLoader.prepareFontLoadEvent(rules, fontsToLoad, request);\n } else {\n request.complete();\n }\n },\n\n queueLoadingCallback: function FontLoader_queueLoadingCallback(callback) {\n function LoadLoader_completeRequest() {\n assert(!request.end, 'completeRequest() cannot be called twice');\n request.end = Date.now();\n\n // sending all completed requests in order how they were queued\n while (context.requests.length > 0 && context.requests[0].end) {\n var otherRequest = context.requests.shift();\n setTimeout(otherRequest.callback, 0);\n }\n }\n\n var context = FontLoader.loadingContext;\n var requestId = 'pdfjs-font-loading-' + (context.nextRequestId++);\n var request = {\n id: requestId,\n complete: LoadLoader_completeRequest,\n callback: callback,\n started: Date.now()\n };\n context.requests.push(request);\n return request;\n },\n\n prepareFontLoadEvent: function fontLoaderPrepareFontLoadEvent(rules,\n fonts,\n request) {\n /** Hack begin */\n // There's currently no event when a font has finished downloading so the\n // following code is a dirty hack to 'guess' when a font is\n // ready. It's assumed fonts are loaded in order, so add a known test\n // font after the desired fonts and then test for the loading of that\n // test font.\n\n function int32(data, offset) {\n return (data.charCodeAt(offset) << 24) |\n (data.charCodeAt(offset + 1) << 16) |\n (data.charCodeAt(offset + 2) << 8) |\n (data.charCodeAt(offset + 3) & 0xff);\n }\n\n function string32(value) {\n return String.fromCharCode((value >> 24) & 0xff) +\n String.fromCharCode((value >> 16) & 0xff) +\n String.fromCharCode((value >> 8) & 0xff) +\n String.fromCharCode(value & 0xff);\n }\n\n function spliceString(s, offset, remove, insert) {\n var chunk1 = data.substr(0, offset);\n var chunk2 = data.substr(offset + remove);\n return chunk1 + insert + chunk2;\n }\n\n var i, ii;\n\n var canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n\n var called = 0;\n function isFontReady(name, callback) {\n called++;\n // With setTimeout clamping this gives the font ~100ms to load.\n if(called > 30) {\n warn('Load test font never loaded.');\n callback();\n return;\n }\n ctx.font = '30px ' + name;\n ctx.fillText('.', 0, 20);\n var imageData = ctx.getImageData(0, 0, 1, 1);\n if (imageData.data[3] > 0) {\n callback();\n return;\n }\n setTimeout(isFontReady.bind(null, name, callback));\n }\n\n var loadTestFontId = 'lt' + Date.now() + this.loadTestFontId++;\n // Chromium seems to cache fonts based on a hash of the actual font data,\n // so the font must be modified for each load test else it will appear to\n // be loaded already.\n // TODO: This could maybe be made faster by avoiding the btoa of the full\n // font by splitting it in chunks before hand and padding the font id.\n var data = this.loadTestFont;\n var COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)\n data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length,\n loadTestFontId);\n // CFF checksum is important for IE, adjusting it\n var CFF_CHECKSUM_OFFSET = 16;\n var XXXX_VALUE = 0x58585858; // the \"comment\" filled with 'X'\n var checksum = int32(data, CFF_CHECKSUM_OFFSET);\n for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;\n }\n if (i < loadTestFontId.length) { // align to 4 bytes boundary\n checksum = (checksum - XXXX_VALUE +\n int32(loadTestFontId + 'XXX', i)) | 0;\n }\n data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n\n var url = 'url(data:font/opentype;base64,' + btoa(data) + ');';\n var rule = '@font-face { font-family:\"' + loadTestFontId + '\";src:' +\n url + '}';\n FontLoader.insertRule(rule);\n\n var names = [];\n for (i = 0, ii = fonts.length; i < ii; i++) {\n names.push(fonts[i].loadedName);\n }\n names.push(loadTestFontId);\n\n var div = document.createElement('div');\n div.setAttribute('style',\n 'visibility: hidden;' +\n 'width: 10px; height: 10px;' +\n 'position: absolute; top: 0px; left: 0px;');\n for (i = 0, ii = names.length; i < ii; ++i) {\n var span = document.createElement('span');\n span.textContent = 'Hi';\n span.style.fontFamily = names[i];\n div.appendChild(span);\n }\n document.body.appendChild(div);\n\n isFontReady(loadTestFontId, function() {\n document.body.removeChild(div);\n request.complete();\n });\n /** Hack end */\n }\n};\n\nvar FontFace = (function FontFaceClosure() {\n function FontFace(name, file, properties) {\n this.compiledGlyphs = {};\n if (arguments.length === 1) {\n // importing translated data\n var data = arguments[0];\n for (var i in data) {\n this[i] = data[i];\n }\n return;\n }\n }\n FontFace.prototype = {\n bindDOM: function FontFace_bindDOM() {\n if (!this.data)\n return null;\n\n if (PDFJS.disableFontFace) {\n this.disableFontFace = true;\n return null;\n }\n\n var data = bytesToString(this.data);\n var fontName = this.loadedName;\n\n // Add the font-face rule to the document\n var url = ('url(data:' + this.mimetype + ';base64,' +\n window.btoa(data) + ');');\n var rule = '@font-face { font-family:\"' + fontName + '\";src:' + url + '}';\n\n FontLoader.insertRule(rule);\n\n if (PDFJS.pdfBug && 'FontInspector' in globalScope &&\n globalScope['FontInspector'].enabled)\n globalScope['FontInspector'].fontAdded(this, url);\n\n return rule;\n },\n getPathGenerator: function (objs, character) {\n if (!(character in this.compiledGlyphs)) {\n var js = objs.get(this.loadedName + '_path_' + character);\n /*jshint -W054 */\n this.compiledGlyphs[character] = new Function('c', 'size', js);\n }\n return this.compiledGlyphs[character];\n }\n };\n return FontFace;\n})();\n\n\n}).call((typeof window === 'undefined') ? this : window);\n\nif (!PDFJS.workerSrc && typeof document !== 'undefined') {\n // workerSrc is not set -- using last script url to define default location\n PDFJS.workerSrc = (function () {\n 'use strict';\n var scriptTagContainer = document.body ||\n document.getElementsByTagName('head')[0];\n var pdfjsSrc = scriptTagContainer.lastChild.src;\n return pdfjsSrc && pdfjsSrc.replace(/\\.js$/i, '.worker.js');\n })();\n}\n\n\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals VBArray, PDFJS */\n\n'use strict';\n\n// Initializing PDFJS global object here, it case if we need to change/disable\n// some PDF.js features, e.g. range requests\nif (typeof PDFJS === 'undefined') {\n (typeof window !== 'undefined' ? window : this).PDFJS = {};\n}\n\n// Checking if the typed arrays are supported\n// Support: iOS<6.0 (subarray), IE<10, Android<4.0\n(function checkTypedArrayCompatibility() {\n if (typeof Uint8Array !== 'undefined') {\n // Support: iOS<6.0\n if (typeof Uint8Array.prototype.subarray === 'undefined') {\n Uint8Array.prototype.subarray = function subarray(start, end) {\n return new Uint8Array(this.slice(start, end));\n };\n Float32Array.prototype.subarray = function subarray(start, end) {\n return new Float32Array(this.slice(start, end));\n };\n }\n\n // Support: Android<4.1\n if (typeof Float64Array === 'undefined') {\n window.Float64Array = Float32Array;\n }\n return;\n }\n\n function subarray(start, end) {\n return new TypedArray(this.slice(start, end));\n }\n\n function setArrayOffset(array, offset) {\n if (arguments.length < 2) {\n offset = 0;\n }\n for (var i = 0, n = array.length; i < n; ++i, ++offset) {\n this[offset] = array[i] & 0xFF;\n }\n }\n\n function TypedArray(arg1) {\n var result, i, n;\n if (typeof arg1 === 'number') {\n result = [];\n for (i = 0; i < arg1; ++i) {\n result[i] = 0;\n }\n } else if ('slice' in arg1) {\n result = arg1.slice(0);\n } else {\n result = [];\n for (i = 0, n = arg1.length; i < n; ++i) {\n result[i] = arg1[i];\n }\n }\n\n result.subarray = subarray;\n result.buffer = result;\n result.byteLength = result.length;\n result.set = setArrayOffset;\n\n if (typeof arg1 === 'object' && arg1.buffer) {\n result.buffer = arg1.buffer;\n }\n return result;\n }\n\n window.Uint8Array = TypedArray;\n window.Int8Array = TypedArray;\n\n // we don't need support for set, byteLength for 32-bit array\n // so we can use the TypedArray as well\n window.Uint32Array = TypedArray;\n window.Int32Array = TypedArray;\n window.Uint16Array = TypedArray;\n window.Float32Array = TypedArray;\n window.Float64Array = TypedArray;\n})();\n\n// URL = URL || webkitURL\n// Support: Safari<7, Android 4.2+\n(function normalizeURLObject() {\n if (!window.URL) {\n window.URL = window.webkitURL;\n }\n})();\n\n// Object.defineProperty()?\n// Support: Android<4.0, Safari<5.1\n(function checkObjectDefinePropertyCompatibility() {\n if (typeof Object.defineProperty !== 'undefined') {\n var definePropertyPossible = true;\n try {\n // some browsers (e.g. safari) cannot use defineProperty() on DOM objects\n // and thus the native version is not sufficient\n Object.defineProperty(new Image(), 'id', { value: 'test' });\n // ... another test for android gb browser for non-DOM objects\n var Test = function Test() {};\n Test.prototype = { get id() { } };\n Object.defineProperty(new Test(), 'id',\n { value: '', configurable: true, enumerable: true, writable: false });\n } catch (e) {\n definePropertyPossible = false;\n }\n if (definePropertyPossible) {\n return;\n }\n }\n\n Object.defineProperty = function objectDefineProperty(obj, name, def) {\n delete obj[name];\n if ('get' in def) {\n obj.__defineGetter__(name, def['get']);\n }\n if ('set' in def) {\n obj.__defineSetter__(name, def['set']);\n }\n if ('value' in def) {\n obj.__defineSetter__(name, function objectDefinePropertySetter(value) {\n this.__defineGetter__(name, function objectDefinePropertyGetter() {\n return value;\n });\n return value;\n });\n obj[name] = def.value;\n }\n };\n})();\n\n\n// No XMLHttpRequest#response?\n// Support: IE<11, Android <4.0\n(function checkXMLHttpRequestResponseCompatibility() {\n var xhrPrototype = XMLHttpRequest.prototype;\n var xhr = new XMLHttpRequest();\n if (!('overrideMimeType' in xhr)) {\n // IE10 might have response, but not overrideMimeType\n // Support: IE10\n Object.defineProperty(xhrPrototype, 'overrideMimeType', {\n value: function xmlHttpRequestOverrideMimeType(mimeType) {}\n });\n }\n if ('responseType' in xhr) {\n return;\n }\n\n // The worker will be using XHR, so we can save time and disable worker.\n PDFJS.disableWorker = true;\n\n Object.defineProperty(xhrPrototype, 'responseType', {\n get: function xmlHttpRequestGetResponseType() {\n return this._responseType || 'text';\n },\n set: function xmlHttpRequestSetResponseType(value) {\n if (value === 'text' || value === 'arraybuffer') {\n this._responseType = value;\n if (value === 'arraybuffer' &&\n typeof this.overrideMimeType === 'function') {\n this.overrideMimeType('text/plain; charset=x-user-defined');\n }\n }\n }\n });\n\n // Support: IE9\n if (typeof VBArray !== 'undefined') {\n Object.defineProperty(xhrPrototype, 'response', {\n get: function xmlHttpRequestResponseGet() {\n if (this.responseType === 'arraybuffer') {\n return new Uint8Array(new VBArray(this.responseBody).toArray());\n } else {\n return this.responseText;\n }\n }\n });\n return;\n }\n\n Object.defineProperty(xhrPrototype, 'response', {\n get: function xmlHttpRequestResponseGet() {\n if (this.responseType !== 'arraybuffer') {\n return this.responseText;\n }\n var text = this.responseText;\n var i, n = text.length;\n var result = new Uint8Array(n);\n for (i = 0; i < n; ++i) {\n result[i] = text.charCodeAt(i) & 0xFF;\n }\n return result.buffer;\n }\n });\n})();\n\n// window.btoa (base64 encode function) ?\n// Support: IE<10\n(function checkWindowBtoaCompatibility() {\n if ('btoa' in window) {\n return;\n }\n\n var digits =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n window.btoa = function windowBtoa(chars) {\n var buffer = '';\n var i, n;\n for (i = 0, n = chars.length; i < n; i += 3) {\n var b1 = chars.charCodeAt(i) & 0xFF;\n var b2 = chars.charCodeAt(i + 1) & 0xFF;\n var b3 = chars.charCodeAt(i + 2) & 0xFF;\n var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);\n var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;\n var d4 = i + 2 < n ? (b3 & 0x3F) : 64;\n buffer += (digits.charAt(d1) + digits.charAt(d2) +\n digits.charAt(d3) + digits.charAt(d4));\n }\n return buffer;\n };\n})();\n\n// window.atob (base64 encode function)?\n// Support: IE<10\n(function checkWindowAtobCompatibility() {\n if ('atob' in window) {\n return;\n }\n\n // https://github.com/davidchambers/Base64.js\n var digits =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n window.atob = function (input) {\n input = input.replace(/=+$/, '');\n if (input.length % 4 === 1) {\n throw new Error('bad atob input');\n }\n for (\n // initialize result and counters\n var bc = 0, bs, buffer, idx = 0, output = '';\n // get next character\n buffer = input.charAt(idx++);\n // character found in table?\n // initialize bit storage and add its ascii value\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = digits.indexOf(buffer);\n }\n return output;\n };\n})();\n\n// Function.prototype.bind?\n// Support: Android<4.0, iOS<6.0\n(function checkFunctionPrototypeBindCompatibility() {\n if (typeof Function.prototype.bind !== 'undefined') {\n return;\n }\n\n Function.prototype.bind = function functionPrototypeBind(obj) {\n var fn = this, headArgs = Array.prototype.slice.call(arguments, 1);\n var bound = function functionPrototypeBindBound() {\n var args = headArgs.concat(Array.prototype.slice.call(arguments));\n return fn.apply(obj, args);\n };\n return bound;\n };\n})();\n\n// HTMLElement dataset property\n// Support: IE<11, Safari<5.1, Android<4.0\n(function checkDatasetProperty() {\n var div = document.createElement('div');\n if ('dataset' in div) {\n return; // dataset property exists\n }\n\n Object.defineProperty(HTMLElement.prototype, 'dataset', {\n get: function() {\n if (this._dataset) {\n return this._dataset;\n }\n\n var dataset = {};\n for (var j = 0, jj = this.attributes.length; j < jj; j++) {\n var attribute = this.attributes[j];\n if (attribute.name.substring(0, 5) !== 'data-') {\n continue;\n }\n var key = attribute.name.substring(5).replace(/\\-([a-z])/g,\n function(all, ch) {\n return ch.toUpperCase();\n });\n dataset[key] = attribute.value;\n }\n\n Object.defineProperty(this, '_dataset', {\n value: dataset,\n writable: false,\n enumerable: false\n });\n return dataset;\n },\n enumerable: true\n });\n})();\n\n// HTMLElement classList property\n// Support: IE<10, Android<4.0, iOS<5.0\n(function checkClassListProperty() {\n var div = document.createElement('div');\n if ('classList' in div) {\n return; // classList property exists\n }\n\n function changeList(element, itemName, add, remove) {\n var s = element.className || '';\n var list = s.split(/\\s+/g);\n if (list[0] === '') {\n list.shift();\n }\n var index = list.indexOf(itemName);\n if (index < 0 && add) {\n list.push(itemName);\n }\n if (index >= 0 && remove) {\n list.splice(index, 1);\n }\n element.className = list.join(' ');\n return (index >= 0);\n }\n\n var classListPrototype = {\n add: function(name) {\n changeList(this.element, name, true, false);\n },\n contains: function(name) {\n return changeList(this.element, name, false, false);\n },\n remove: function(name) {\n changeList(this.element, name, false, true);\n },\n toggle: function(name) {\n changeList(this.element, name, true, true);\n }\n };\n\n Object.defineProperty(HTMLElement.prototype, 'classList', {\n get: function() {\n if (this._classList) {\n return this._classList;\n }\n\n var classList = Object.create(classListPrototype, {\n element: {\n value: this,\n writable: false,\n enumerable: true\n }\n });\n Object.defineProperty(this, '_classList', {\n value: classList,\n writable: false,\n enumerable: false\n });\n return classList;\n },\n enumerable: true\n });\n})();\n\n// Check console compatibility\n// In older IE versions the console object is not available\n// unless console is open.\n// Support: IE<10\n(function checkConsoleCompatibility() {\n if (!('console' in window)) {\n window.console = {\n log: function() {},\n error: function() {},\n warn: function() {}\n };\n } else if (!('bind' in console.log)) {\n // native functions in IE9 might not have bind\n console.log = (function(fn) {\n return function(msg) { return fn(msg); };\n })(console.log);\n console.error = (function(fn) {\n return function(msg) { return fn(msg); };\n })(console.error);\n console.warn = (function(fn) {\n return function(msg) { return fn(msg); };\n })(console.warn);\n }\n})();\n\n// Check onclick compatibility in Opera\n// Support: Opera<15\n(function checkOnClickCompatibility() {\n // workaround for reported Opera bug DSK-354448:\n // onclick fires on disabled buttons with opaque content\n function ignoreIfTargetDisabled(event) {\n if (isDisabled(event.target)) {\n event.stopPropagation();\n }\n }\n function isDisabled(node) {\n return node.disabled || (node.parentNode && isDisabled(node.parentNode));\n }\n if (navigator.userAgent.indexOf('Opera') !== -1) {\n // use browser detection since we cannot feature-check this bug\n document.addEventListener('click', ignoreIfTargetDisabled, true);\n }\n})();\n\n// Checks if possible to use URL.createObjectURL()\n// Support: IE\n(function checkOnBlobSupport() {\n // sometimes IE loosing the data created with createObjectURL(), see #3977\n if (navigator.userAgent.indexOf('Trident') >= 0) {\n PDFJS.disableCreateObjectURL = true;\n }\n})();\n\n// Checks if navigator.language is supported\n(function checkNavigatorLanguage() {\n if ('language' in navigator) {\n return;\n }\n PDFJS.locale = navigator.userLanguage || 'en-US';\n})();\n\n(function checkRangeRequests() {\n // Safari has issues with cached range requests see:\n // https://github.com/mozilla/pdf.js/issues/3260\n // Last tested with version 6.0.4.\n // Support: Safari 6.0+\n var isSafari = Object.prototype.toString.call(\n window.HTMLElement).indexOf('Constructor') > 0;\n\n // Older versions of Android (pre 3.0) has issues with range requests, see:\n // https://github.com/mozilla/pdf.js/issues/3381.\n // Make sure that we only match webkit-based Android browsers,\n // since Firefox/Fennec works as expected.\n // Support: Android<3.0\n var regex = /Android\\s[0-2][^\\d]/;\n var isOldAndroid = regex.test(navigator.userAgent);\n\n // Range requests are broken in Chrome 39 and 40, https://crbug.com/442318\n var isChromeWithRangeBug = /Chrome\\/(39|40)\\./.test(navigator.userAgent);\n\n if (isSafari || isOldAndroid || isChromeWithRangeBug) {\n PDFJS.disableRange = true;\n PDFJS.disableStream = true;\n }\n})();\n\n// Check if the browser supports manipulation of the history.\n// Support: IE<10, Android<4.2\n(function checkHistoryManipulation() {\n // Android 2.x has so buggy pushState support that it was removed in\n // Android 3.0 and restored as late as in Android 4.2.\n // Support: Android 2.x\n if (!history.pushState || navigator.userAgent.indexOf('Android 2.') >= 0) {\n PDFJS.disableHistory = true;\n }\n})();\n\n// Support: IE<11, Chrome<21, Android<4.4, Safari<6\n(function checkSetPresenceInImageData() {\n // IE < 11 will use window.CanvasPixelArray which lacks set function.\n if (window.CanvasPixelArray) {\n if (typeof window.CanvasPixelArray.prototype.set !== 'function') {\n window.CanvasPixelArray.prototype.set = function(arr) {\n for (var i = 0, ii = this.length; i < ii; i++) {\n this[i] = arr[i];\n }\n };\n }\n } else {\n // Old Chrome and Android use an inaccessible CanvasPixelArray prototype.\n // Because we cannot feature detect it, we rely on user agent parsing.\n var polyfill = false, versionMatch;\n if (navigator.userAgent.indexOf('Chrom') >= 0) {\n versionMatch = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n // Chrome < 21 lacks the set function.\n polyfill = versionMatch && parseInt(versionMatch[2]) < 21;\n } else if (navigator.userAgent.indexOf('Android') >= 0) {\n // Android < 4.4 lacks the set function.\n // Android >= 4.4 will contain Chrome in the user agent,\n // thus pass the Chrome check above and not reach this block.\n polyfill = /Android\\s[0-4][^\\d]/g.test(navigator.userAgent);\n } else if (navigator.userAgent.indexOf('Safari') >= 0) {\n versionMatch = navigator.userAgent.\n match(/Version\\/([0-9]+)\\.([0-9]+)\\.([0-9]+) Safari\\//);\n // Safari < 6 lacks the set function.\n polyfill = versionMatch && parseInt(versionMatch[1]) < 6;\n }\n\n if (polyfill) {\n var contextPrototype = window.CanvasRenderingContext2D.prototype;\n var createImageData = contextPrototype.createImageData;\n contextPrototype.createImageData = function(w, h) {\n var imageData = createImageData.call(this, w, h);\n imageData.data.set = function(arr) {\n for (var i = 0, ii = this.length; i < ii; i++) {\n this[i] = arr[i];\n }\n };\n return imageData;\n };\n // this closure will be kept referenced, so clear its vars\n contextPrototype = null;\n }\n }\n})();\n\n// Support: IE<10, Android<4.0, iOS\n(function checkRequestAnimationFrame() {\n function fakeRequestAnimationFrame(callback) {\n window.setTimeout(callback, 20);\n }\n\n var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\n if (isIOS) {\n // requestAnimationFrame on iOS is broken, replacing with fake one.\n window.requestAnimationFrame = fakeRequestAnimationFrame;\n return;\n }\n if ('requestAnimationFrame' in window) {\n return;\n }\n window.requestAnimationFrame =\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n fakeRequestAnimationFrame;\n})();\n\n(function checkCanvasSizeLimitation() {\n var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\n var isAndroid = /Android/g.test(navigator.userAgent);\n if (isIOS || isAndroid) {\n // 5MP\n PDFJS.maxCanvasPixels = 5242880;\n }\n})();\n\n// Disable fullscreen support for certain problematic configurations.\n// Support: IE11+ (when embedded).\n(function checkFullscreenSupport() {\n var isEmbeddedIE = (navigator.userAgent.indexOf('Trident') >= 0 &&\n window.parent !== window);\n if (isEmbeddedIE) {\n PDFJS.disableFullscreen = true;\n }\n})();\n\n// Provides document.currentScript support\n// Support: IE, Chrome<29.\n(function checkCurrentScript() {\n if ('currentScript' in document) {\n return;\n }\n Object.defineProperty(document, 'currentScript', {\n get: function () {\n var scripts = document.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n})();","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"pdfMake\"] = __webpack_require__(1);\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */\n\t/* jslint browser: true */\n\t/* global BlobBuilder */\n\t'use strict';\n\n\tvar PdfPrinter = __webpack_require__(2);\n\tvar saveAs = __webpack_require__(3);\n\n\tvar defaultClientFonts = {\n\t\tRoboto: {\n\t\t\tnormal: 'Roboto-Regular.ttf',\n\t\t\tbold: 'Roboto-Medium.ttf',\n\t\t\titalics: 'Roboto-Italic.ttf',\n\t\t\tbolditalics: 'Roboto-Italic.ttf'\n\t\t}\n\t};\n\n\tfunction Document(docDefinition, fonts, vfs) {\n\t\tthis.docDefinition = docDefinition;\n\t\tthis.fonts = fonts || defaultClientFonts;\n\t\tthis.vfs = vfs;\n\t}\n\n\tDocument.prototype._createDoc = function(options, callback) {\n\t\tvar printer = new PdfPrinter(this.fonts);\n\t\tprinter.fs.bindFS(this.vfs);\n\n\t\tvar doc = printer.createPdfKitDocument(this.docDefinition, options);\n\t\tvar chunks = [];\n\t\tvar result;\n\n\t\tdoc.on('data', function(chunk) {\n\t\t\tchunks.push(chunk);\n\t\t});\n\t\tdoc.on('end', function() {\n\t\t\tresult = Buffer.concat(chunks);\n\t\t\tcallback(result, doc._pdfMakePages);\n\t\t});\n\t\tdoc.end();\n\t};\n\n\tDocument.prototype._getPages = function(options, cb){\n\t if (!cb) throw 'getBuffer is an async method and needs a callback argument';\n\t this._createDoc(options, function(ignoreBuffer, pages){\n\t cb(pages);\n\t });\n\t};\n\n\tDocument.prototype.open = function(message) {\n\t\t// we have to open the window immediately and store the reference\n\t\t// otherwise popup blockers will stop us\n\t\tvar win = window.open('', '_blank');\n\n\t\ttry {\n\t\t\tthis.getDataUrl(function(result) {\n\t\t\t\twin.location.href = result;\n\t\t\t});\n\t\t} catch(e) {\n\t\t\twin.close();\n\t\t\tthrow e;\n\t\t}\n\t};\n\n\n\tDocument.prototype.print = function() {\n\t this.getDataUrl(function(dataUrl) {\n\t var iFrame = document.createElement('iframe');\n\t iFrame.style.position = 'absolute';\n\t iFrame.style.left = '-99999px';\n\t iFrame.src = dataUrl;\n\t iFrame.onload = function() {\n\t function removeIFrame(){\n\t document.body.removeChild(iFrame);\n\t document.removeEventListener('click', removeIFrame);\n\t }\n\t document.addEventListener('click', removeIFrame, false);\n\t };\n\n\t document.body.appendChild(iFrame);\n\t }, { autoPrint: true });\n\t};\n\n\tDocument.prototype.download = function(defaultFileName, cb) {\n\t if(typeof defaultFileName === \"function\") {\n\t cb = defaultFileName;\n\t defaultFileName = null;\n\t }\n\n\t defaultFileName = defaultFileName || 'file.pdf';\n\t this.getBuffer(function(result) {\n\t saveAs(new Blob([result], {type: 'application/pdf'}), defaultFileName);\n\t if (typeof cb === \"function\") {\n\t cb();\n\t }\n\t });\n\t};\n\n\tDocument.prototype.getBase64 = function(cb, options) {\n\t\tif (!cb) throw 'getBase64 is an async method and needs a callback argument';\n\t\tthis._createDoc(options, function(buffer) {\n\t\t\tcb(buffer.toString('base64'));\n\t\t});\n\t};\n\n\tDocument.prototype.getDataUrl = function(cb, options) {\n\t\tif (!cb) throw 'getDataUrl is an async method and needs a callback argument';\n\t\tthis._createDoc(options, function(buffer) {\n\t\t\tcb('data:application/pdf;base64,' + buffer.toString('base64'));\n\t\t});\n\t};\n\n\tDocument.prototype.getBuffer = function(cb, options) {\n\t\tif (!cb) throw 'getBuffer is an async method and needs a callback argument';\n\t\tthis._createDoc(options, function(buffer){\n\t cb(buffer);\n\t });\n\t};\n\n\tmodule.exports = {\n\t\tcreatePdf: function(docDefinition) {\n\t\t\treturn new Document(docDefinition, window.pdfMake.fonts, window.pdfMake.vfs);\n\t\t}\n\t};\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4).Buffer))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* jslint node: true */\n\t/* global window */\n\t'use strict';\n\n\tvar _ = __webpack_require__(11);\n\tvar FontProvider = __webpack_require__(5);\n\tvar LayoutBuilder = __webpack_require__(6);\n\tvar PdfKit = __webpack_require__(28);\n\tvar PDFReference = __webpack_require__(12);\n\tvar sizes = __webpack_require__(7);\n\tvar ImageMeasure = __webpack_require__(8);\n\tvar textDecorator = __webpack_require__(9);\n\tvar FontProvider = __webpack_require__(5);\n\n\t////////////////////////////////////////\n\t// PdfPrinter\n\n\t/**\n\t * @class Creates an instance of a PdfPrinter which turns document definition into a pdf\n\t *\n\t * @param {Object} fontDescriptors font definition dictionary\n\t *\n\t * @example\n\t * var fontDescriptors = {\n\t *\tRoboto: {\n\t *\t\tnormal: 'fonts/Roboto-Regular.ttf',\n\t *\t\tbold: 'fonts/Roboto-Medium.ttf',\n\t *\t\titalics: 'fonts/Roboto-Italic.ttf',\n\t *\t\tbolditalics: 'fonts/Roboto-Italic.ttf'\n\t *\t}\n\t * };\n\t *\n\t * var printer = new PdfPrinter(fontDescriptors);\n\t */\n\tfunction PdfPrinter(fontDescriptors) {\n\t\tthis.fontDescriptors = fontDescriptors;\n\t}\n\n\t/**\n\t * Executes layout engine for the specified document and renders it into a pdfkit document\n\t * ready to be saved.\n\t *\n\t * @param {Object} docDefinition document definition\n\t * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)\n\t * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition\n\t * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document\n\t * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)\n\t * @param {Number} docDefinition.pageSize.width width\n\t * @param {Number} docDefinition.pageSize.height height\n\t * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)\n\t *\n\t * @example\n\t *\n\t * var docDefinition = {\n\t *\tcontent: [\n\t *\t\t'First paragraph',\n\t *\t\t'Second paragraph, this time a little bit longer',\n\t *\t\t{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },\n\t *\t\t{ text: 'Another paragraph using a named style', style: 'header' },\n\t *\t\t{ text: ['playing with ', 'inlines' ] },\n\t *\t\t{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },\n\t *\t],\n\t *\tstyles: {\n\t *\t\theader: { fontSize: 30, bold: true }\n\t *\t}\n\t * }\n\t *\n\t * var pdfDoc = printer.createPdfKitDocument(docDefinition);\n\t *\n\t * pdfDoc.pipe(fs.createWriteStream('sample.pdf'));\n\t * pdfDoc.end();\n\t *\n\t * @return {Object} a pdfKit document object which can be saved or encode to data-url\n\t */\n\tPdfPrinter.prototype.createPdfKitDocument = function(docDefinition, options) {\n\t\toptions = options || {};\n\n\t\tvar pageSize = pageSize2widthAndHeight(docDefinition.pageSize || 'a4');\n\n\t if(docDefinition.pageOrientation === 'landscape') {\n\t pageSize = { width: pageSize.height, height: pageSize.width};\n\t }\n\t\tpageSize.orientation = docDefinition.pageOrientation === 'landscape' ? docDefinition.pageOrientation : 'portrait';\n\n\t\tthis.pdfKitDoc = new PdfKit({ size: [ pageSize.width, pageSize.height ], compress: false});\n\t\tthis.pdfKitDoc.info.Producer = 'pdfmake';\n\t\tthis.pdfKitDoc.info.Creator = 'pdfmake';\n\t\tthis.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);\n\n\t docDefinition.images = docDefinition.images || {};\n\n\t\tvar builder = new LayoutBuilder(\n\t\t\tpageSize,\n\t\t\tfixPageMargins(docDefinition.pageMargins || 40),\n\t new ImageMeasure(this.pdfKitDoc, docDefinition.images));\n\n\t registerDefaultTableLayouts(builder);\n\t if (options.tableLayouts) {\n\t builder.registerTableLayouts(options.tableLayouts);\n\t }\n\n\t\tvar pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || { fontSize: 12, font: 'Roboto' }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);\n\n\t\trenderPages(pages, this.fontProvider, this.pdfKitDoc);\n\n\t\tif(options.autoPrint){\n\t var jsRef = this.pdfKitDoc.ref({\n\t\t\t\tS: 'JavaScript',\n\t\t\t\tJS: new StringObject('this.print\\\\(true\\\\);')\n\t\t\t});\n\t\t\tvar namesRef = this.pdfKitDoc.ref({\n\t\t\t\tNames: [new StringObject('EmbeddedJS'), new PDFReference(this.pdfKitDoc, jsRef.id)],\n\t\t\t});\n\n\t\t\tjsRef.end();\n\t\t\tnamesRef.end();\n\n\t\t\tthis.pdfKitDoc._root.data.Names = {\n\t\t\t\tJavaScript: new PDFReference(this.pdfKitDoc, namesRef.id)\n\t\t\t};\n\t\t}\n\t\treturn this.pdfKitDoc;\n\t};\n\n\tfunction fixPageMargins(margin) {\n\t if (!margin) return null;\n\n\t if (typeof margin === 'number' || margin instanceof Number) {\n\t margin = { left: margin, right: margin, top: margin, bottom: margin };\n\t } else if (margin instanceof Array) {\n\t if (margin.length === 2) {\n\t margin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };\n\t } else if (margin.length === 4) {\n\t margin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };\n\t } else throw 'Invalid pageMargins definition';\n\t }\n\n\t return margin;\n\t}\n\n\tfunction registerDefaultTableLayouts(layoutBuilder) {\n\t layoutBuilder.registerTableLayouts({\n\t noBorders: {\n\t hLineWidth: function(i) { return 0; },\n\t vLineWidth: function(i) { return 0; },\n\t paddingLeft: function(i) { return i && 4 || 0; },\n\t paddingRight: function(i, node) { return (i < node.table.widths.length - 1) ? 4 : 0; },\n\t },\n\t headerLineOnly: {\n\t hLineWidth: function(i, node) {\n\t if (i === 0 || i === node.table.body.length) return 0;\n\t return (i === node.table.headerRows) ? 2 : 0;\n\t },\n\t vLineWidth: function(i) { return 0; },\n\t paddingLeft: function(i) {\n\t return i === 0 ? 0 : 8;\n\t },\n\t paddingRight: function(i, node) {\n\t return (i === node.table.widths.length - 1) ? 0 : 8;\n\t }\n\t },\n\t lightHorizontalLines: {\n\t hLineWidth: function(i, node) {\n\t if (i === 0 || i === node.table.body.length) return 0;\n\t return (i === node.table.headerRows) ? 2 : 1;\n\t },\n\t vLineWidth: function(i) { return 0; },\n\t hLineColor: function(i) { return i === 1 ? 'black' : '#aaa'; },\n\t paddingLeft: function(i) {\n\t return i === 0 ? 0 : 8;\n\t },\n\t paddingRight: function(i, node) {\n\t return (i === node.table.widths.length - 1) ? 0 : 8;\n\t }\n\t }\n\t });\n\t}\n\n\tvar defaultLayout = {\n\t hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },\n\t vLineWidth: function(i, node) { return 1; },\n\t hLineColor: function(i, node) { return 'black'; },\n\t vLineColor: function(i, node) { return 'black'; },\n\t paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },\n\t paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },\n\t paddingTop: function(i, node) { return 2; },\n\t paddingBottom: function(i, node) { return 2; }\n\t};\n\n\tfunction pageSize2widthAndHeight(pageSize) {\n\t if (typeof pageSize == 'string' || pageSize instanceof String) {\n\t var size = sizes[pageSize.toUpperCase()];\n\t if (!size) throw ('Page size ' + pageSize + ' not recognized');\n\t return { width: size[0], height: size[1] };\n\t }\n\n\t return pageSize;\n\t}\n\n\tfunction StringObject(str){\n\t\tthis.isString = true;\n\t\tthis.toString = function(){\n\t\t\treturn str;\n\t\t};\n\t}\n\n\tfunction updatePageOrientationInOptions(currentPage, pdfKitDoc) {\n\t\tvar previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';\n\n\t\tif(currentPage.pageSize.orientation !== previousPageOrientation) {\n\t\t\tvar width = pdfKitDoc.options.size[0];\n\t\t\tvar height = pdfKitDoc.options.size[1];\n\t\t\tpdfKitDoc.options.size = [height, width];\n\t\t}\n\t}\n\n\tfunction renderPages(pages, fontProvider, pdfKitDoc) {\n\t pdfKitDoc._pdfMakePages = pages;\n\t\tfor (var i = 0; i < pages.length; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\tupdatePageOrientationInOptions(pages[i], pdfKitDoc);\n\t\t\t\tpdfKitDoc.addPage(pdfKitDoc.options);\n\t\t\t}\n\n\t\t\tvar page = pages[i];\n\t for(var ii = 0, il = page.items.length; ii < il; ii++) {\n\t var item = page.items[ii];\n\t switch(item.type) {\n\t case 'vector':\n\t renderVector(item.item, pdfKitDoc);\n\t break;\n\t case 'line':\n\t renderLine(item.item, item.item.x, item.item.y, pdfKitDoc);\n\t break;\n\t case 'image':\n\t renderImage(item.item, item.item.x, item.item.y, pdfKitDoc);\n\t break;\n\t\t\t\t\t}\n\t }\n\t if(page.watermark){\n\t renderWatermark(page, pdfKitDoc);\n\t\t}\n\n\t fontProvider.setFontRefsToPdfDoc();\n\t }\n\t}\n\n\tfunction renderLine(line, x, y, pdfKitDoc) {\n\t\tx = x || 0;\n\t\ty = y || 0;\n\n\t\tvar ascenderHeight = line.getAscenderHeight();\n\n\t\ttextDecorator.drawBackground(line, x, y, pdfKitDoc);\n\n\t\t//TODO: line.optimizeInlines();\n\t\tfor(var i = 0, l = line.inlines.length; i < l; i++) {\n\t\t\tvar inline = line.inlines[i];\n\n\t\t\tpdfKitDoc.fill(inline.color || 'black');\n\n\t\t\tpdfKitDoc.save();\n\t\t\tpdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);\n\n\n\t var encoded = inline.font.encode(inline.text);\n\t\t\tpdfKitDoc.addContent('BT');\n\n\t\t\tpdfKitDoc.addContent('' + (x + inline.x) + ' ' + (pdfKitDoc.page.height - y - ascenderHeight) + ' Td');\n\t\t\tpdfKitDoc.addContent('/' + encoded.fontId + ' ' + inline.fontSize + ' Tf');\n\n\t pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');\n\n\t\t\tpdfKitDoc.addContent('ET');\n\t\t\tpdfKitDoc.restore();\n\t\t}\n\n\t\ttextDecorator.drawDecorations(line, x, y, pdfKitDoc);\n\n\t}\n\n\tfunction renderWatermark(page, pdfKitDoc){\n\t\tvar watermark = page.watermark;\n\n\t\tpdfKitDoc.fill('black');\n\t\tpdfKitDoc.opacity(0.6);\n\n\t\tpdfKitDoc.save();\n\t\tpdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);\n\n\t\tvar angle = Math.atan2(pdfKitDoc.page.height, pdfKitDoc.page.width) * 180/Math.PI;\n\t\tpdfKitDoc.rotate(angle, {origin: [pdfKitDoc.page.width/2, pdfKitDoc.page.height/2]});\n\n\t var encoded = watermark.font.encode(watermark.text);\n\t\tpdfKitDoc.addContent('BT');\n\t\tpdfKitDoc.addContent('' + (pdfKitDoc.page.width/2 - watermark.size.size.width/2) + ' ' + (pdfKitDoc.page.height/2 - watermark.size.size.height/4) + ' Td');\n\t\tpdfKitDoc.addContent('/' + encoded.fontId + ' ' + watermark.size.fontSize + ' Tf');\n\t\tpdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');\n\t\tpdfKitDoc.addContent('ET');\n\t\tpdfKitDoc.restore();\n\t}\n\n\tfunction renderVector(vector, pdfDoc) {\n\t\t//TODO: pdf optimization (there's no need to write all properties everytime)\n\t\tpdfDoc.lineWidth(vector.lineWidth || 1);\n\t\tif (vector.dash) {\n\t\t\tpdfDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length });\n\t\t} else {\n\t\t\tpdfDoc.undash();\n\t\t}\n\t\tpdfDoc.fillOpacity(vector.fillOpacity || 1);\n\t\tpdfDoc.strokeOpacity(vector.strokeOpacity || 1);\n\t\tpdfDoc.lineJoin(vector.lineJoin || 'miter');\n\n\t\t//TODO: clipping\n\n\t\tswitch(vector.type) {\n\t\t\tcase 'ellipse':\n\t\t\t\tpdfDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);\n\t\t\t\tbreak;\n\t\t\tcase 'rect':\n\t\t\t\tif (vector.r) {\n\t\t\t\t\tpdfDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);\n\t\t\t\t} else {\n\t\t\t\t\tpdfDoc.rect(vector.x, vector.y, vector.w, vector.h);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'line':\n\t\t\t\tpdfDoc.moveTo(vector.x1, vector.y1);\n\t\t\t\tpdfDoc.lineTo(vector.x2, vector.y2);\n\t\t\t\tbreak;\n\t\t\tcase 'polyline':\n\t\t\t\tif (vector.points.length === 0) break;\n\n\t\t\t\tpdfDoc.moveTo(vector.points[0].x, vector.points[0].y);\n\t\t\t\tfor(var i = 1, l = vector.points.length; i < l; i++) {\n\t\t\t\t\tpdfDoc.lineTo(vector.points[i].x, vector.points[i].y);\n\t\t\t\t}\n\n\t\t\t\tif (vector.points.length > 1) {\n\t\t\t\t\tvar p1 = vector.points[0];\n\t\t\t\t\tvar pn = vector.points[vector.points.length - 1];\n\n\t\t\t\t\tif (vector.closePath || p1.x === pn.x && p1.y === pn.y) {\n\t\t\t\t\t\tpdfDoc.closePath();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (vector.color && vector.lineColor) {\n\t\t\tpdfDoc.fillAndStroke(vector.color, vector.lineColor);\n\t\t} else if (vector.color) {\n\t\t\tpdfDoc.fill(vector.color);\n\t\t} else {\n\t\t\tpdfDoc.stroke(vector.lineColor || 'black');\n\t\t}\n\t}\n\n\tfunction renderImage(image, x, y, pdfKitDoc) {\n\t pdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });\n\t}\n\n\tmodule.exports = PdfPrinter;\n\n\n\t/* temporary browser extension */\n\tPdfPrinter.prototype.fs = __webpack_require__(10);\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {/* FileSaver.js\n\t * A saveAs() FileSaver implementation.\n\t * 2014-08-29\n\t *\n\t * By Eli Grey, http://eligrey.com\n\t * License: X11/MIT\n\t * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\n\t */\n\n\t/*global self */\n\t/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\n\t/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\n\n\tvar saveAs = saveAs\n\t // IE 10+ (native saveAs)\n\t || (typeof navigator !== \"undefined\" &&\n\t navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))\n\t // Everyone else\n\t || (function(view) {\n\t\t\"use strict\";\n\t\t// IE <10 is explicitly unsupported\n\t\tif (typeof navigator !== \"undefined\" &&\n\t\t /MSIE [1-9]\\./.test(navigator.userAgent)) {\n\t\t\treturn;\n\t\t}\n\t\tvar\n\t\t\t doc = view.document\n\t\t\t // only get URL when necessary in case Blob.js hasn't overridden it yet\n\t\t\t, get_URL = function() {\n\t\t\t\treturn view.URL || view.webkitURL || view;\n\t\t\t}\n\t\t\t, save_link = doc.createElementNS(\"http://www.w3.org/1999/xhtml\", \"a\")\n\t\t\t, can_use_save_link = \"download\" in save_link\n\t\t\t, click = function(node) {\n\t\t\t\tvar event = doc.createEvent(\"MouseEvents\");\n\t\t\t\tevent.initMouseEvent(\n\t\t\t\t\t\"click\", true, false, view, 0, 0, 0, 0, 0\n\t\t\t\t\t, false, false, false, false, 0, null\n\t\t\t\t);\n\t\t\t\tnode.dispatchEvent(event);\n\t\t\t}\n\t\t\t, webkit_req_fs = view.webkitRequestFileSystem\n\t\t\t, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem\n\t\t\t, throw_outside = function(ex) {\n\t\t\t\t(view.setImmediate || view.setTimeout)(function() {\n\t\t\t\t\tthrow ex;\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t\t, force_saveable_type = \"application/octet-stream\"\n\t\t\t, fs_min_size = 0\n\t\t\t// See https://code.google.com/p/chromium/issues/detail?id=375297#c7 for\n\t\t\t// the reasoning behind the timeout and revocation flow\n\t\t\t, arbitrary_revoke_timeout = 10\n\t\t\t, revoke = function(file) {\n\t\t\t\tvar revoker = function() {\n\t\t\t\t\tif (typeof file === \"string\") { // file is an object URL\n\t\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t\t} else { // file is a File\n\t\t\t\t\t\tfile.remove();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (view.chrome) {\n\t\t\t\t\trevoker();\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t\t\t}\n\t\t\t}\n\t\t\t, dispatch = function(filesaver, event_types, event) {\n\t\t\t\tevent_types = [].concat(event_types);\n\t\t\t\tvar i = event_types.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tvar listener = filesaver[\"on\" + event_types[i]];\n\t\t\t\t\tif (typeof listener === \"function\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t, FileSaver = function(blob, name) {\n\t\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\t\tvar\n\t\t\t\t\t filesaver = this\n\t\t\t\t\t, type = blob.type\n\t\t\t\t\t, blob_changed = false\n\t\t\t\t\t, object_url\n\t\t\t\t\t, target_view\n\t\t\t\t\t, dispatch_all = function() {\n\t\t\t\t\t\tdispatch(filesaver, \"writestart progress write writeend\".split(\" \"));\n\t\t\t\t\t}\n\t\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\t\t, fs_error = function() {\n\t\t\t\t\t\t// don't create more object URLs than needed\n\t\t\t\t\t\tif (blob_changed || !object_url) {\n\t\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (target_view) {\n\t\t\t\t\t\t\ttarget_view.location.href = object_url;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar new_tab = view.open(object_url, \"_blank\");\n\t\t\t\t\t\t\tif (new_tab == undefined && typeof safari !== \"undefined\") {\n\t\t\t\t\t\t\t\t//Apple do not allow window.open, see http://bit.ly/1kZffRI\n\t\t\t\t\t\t\t\tview.location.href = object_url\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\trevoke(object_url);\n\t\t\t\t\t}\n\t\t\t\t\t, abortable = function(func) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tif (filesaver.readyState !== filesaver.DONE) {\n\t\t\t\t\t\t\t\treturn func.apply(this, arguments);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t, create_if_not_found = {create: true, exclusive: false}\n\t\t\t\t\t, slice\n\t\t\t\t;\n\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\tif (!name) {\n\t\t\t\t\tname = \"download\";\n\t\t\t\t}\n\t\t\t\tif (can_use_save_link) {\n\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Object and web filesystem URLs have a problem saving in Google Chrome when\n\t\t\t\t// viewed in a tab, so I force save with application/octet-stream\n\t\t\t\t// http://code.google.com/p/chromium/issues/detail?id=91158\n\t\t\t\t// Update: Google errantly closed 91158, I submitted it again:\n\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=389642\n\t\t\t\tif (view.chrome && type && type !== force_saveable_type) {\n\t\t\t\t\tslice = blob.slice || blob.webkitSlice;\n\t\t\t\t\tblob = slice.call(blob, 0, blob.size, force_saveable_type);\n\t\t\t\t\tblob_changed = true;\n\t\t\t\t}\n\t\t\t\t// Since I can't be sure that the guessed media type will trigger a download\n\t\t\t\t// in WebKit, I append .download to the filename.\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=65440\n\t\t\t\tif (webkit_req_fs && name !== \"download\") {\n\t\t\t\t\tname += \".download\";\n\t\t\t\t}\n\t\t\t\tif (type === force_saveable_type || webkit_req_fs) {\n\t\t\t\t\ttarget_view = view;\n\t\t\t\t}\n\t\t\t\tif (!req_fs) {\n\t\t\t\t\tfs_error();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfs_min_size += blob.size;\n\t\t\t\treq_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {\n\t\t\t\t\tfs.root.getDirectory(\"saved\", create_if_not_found, abortable(function(dir) {\n\t\t\t\t\t\tvar save = function() {\n\t\t\t\t\t\t\tdir.getFile(name, create_if_not_found, abortable(function(file) {\n\t\t\t\t\t\t\t\tfile.createWriter(abortable(function(writer) {\n\t\t\t\t\t\t\t\t\twriter.onwriteend = function(event) {\n\t\t\t\t\t\t\t\t\t\ttarget_view.location.href = file.toURL();\n\t\t\t\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\t\t\t\tdispatch(filesaver, \"writeend\", event);\n\t\t\t\t\t\t\t\t\t\trevoke(file);\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\twriter.onerror = function() {\n\t\t\t\t\t\t\t\t\t\tvar error = writer.error;\n\t\t\t\t\t\t\t\t\t\tif (error.code !== error.ABORT_ERR) {\n\t\t\t\t\t\t\t\t\t\t\tfs_error();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\"writestart progress write abort\".split(\" \").forEach(function(event) {\n\t\t\t\t\t\t\t\t\t\twriter[\"on\" + event] = filesaver[\"on\" + event];\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\twriter.write(blob);\n\t\t\t\t\t\t\t\t\tfilesaver.abort = function() {\n\t\t\t\t\t\t\t\t\t\twriter.abort();\n\t\t\t\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tfilesaver.readyState = filesaver.WRITING;\n\t\t\t\t\t\t\t\t}), fs_error);\n\t\t\t\t\t\t\t}), fs_error);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdir.getFile(name, {create: false}, abortable(function(file) {\n\t\t\t\t\t\t\t// delete file if it already exists\n\t\t\t\t\t\t\tfile.remove();\n\t\t\t\t\t\t\tsave();\n\t\t\t\t\t\t}), abortable(function(ex) {\n\t\t\t\t\t\t\tif (ex.code === ex.NOT_FOUND_ERR) {\n\t\t\t\t\t\t\t\tsave();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfs_error();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}));\n\t\t\t\t\t}), fs_error);\n\t\t\t\t}), fs_error);\n\t\t\t}\n\t\t\t, FS_proto = FileSaver.prototype\n\t\t\t, saveAs = function(blob, name) {\n\t\t\t\treturn new FileSaver(blob, name);\n\t\t\t}\n\t\t;\n\t\tFS_proto.abort = function() {\n\t\t\tvar filesaver = this;\n\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\tdispatch(filesaver, \"abort\");\n\t\t};\n\t\tFS_proto.readyState = FS_proto.INIT = 0;\n\t\tFS_proto.WRITING = 1;\n\t\tFS_proto.DONE = 2;\n\n\t\tFS_proto.error =\n\t\tFS_proto.onwritestart =\n\t\tFS_proto.onprogress =\n\t\tFS_proto.onwrite =\n\t\tFS_proto.onabort =\n\t\tFS_proto.onerror =\n\t\tFS_proto.onwriteend =\n\t\t\tnull;\n\n\t\treturn saveAs;\n\t}(\n\t\t typeof self !== \"undefined\" && self\n\t\t|| typeof window !== \"undefined\" && window\n\t\t|| this.content\n\t));\n\t// `self` is undefined in Firefox for Android content script context\n\t// while `this` is nsIContentFrameMessageManager\n\t// with an attribute `content` that corresponds to the window\n\n\tif (typeof module !== \"undefined\" && module !== null) {\n\t module.exports = saveAs;\n\t} else if ((\"function\" !== \"undefined\" && __webpack_require__(13) !== null) && (__webpack_require__(14) != null)) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t return saveAs;\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t}\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(15)(module)))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Buffer) {/*!\n\t * The buffer module from node.js, for the browser.\n\t *\n\t * @author Feross Aboukhadijeh \n\t * @license MIT\n\t */\n\n\tvar base64 = __webpack_require__(31)\n\tvar ieee754 = __webpack_require__(29)\n\tvar isArray = __webpack_require__(30)\n\n\texports.Buffer = Buffer\n\texports.SlowBuffer = SlowBuffer\n\texports.INSPECT_MAX_BYTES = 50\n\tBuffer.poolSize = 8192 // not used by this implementation\n\n\tvar kMaxLength = 0x3fffffff\n\tvar rootParent = {}\n\n\t/**\n\t * If `Buffer.TYPED_ARRAY_SUPPORT`:\n\t * === true Use Uint8Array implementation (fastest)\n\t * === false Use Object implementation (most compatible, even IE6)\n\t *\n\t * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n\t * Opera 11.6+, iOS 4.2+.\n\t *\n\t * Note:\n\t *\n\t * - Implementation must support adding new properties to `Uint8Array` instances.\n\t * Firefox 4-29 lacked support, fixed in Firefox 30+.\n\t * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n\t *\n\t * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n\t *\n\t * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n\t * incorrect length in some situations.\n\t *\n\t * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will\n\t * get the Object implementation, which is slower but will work correctly.\n\t */\n\tBuffer.TYPED_ARRAY_SUPPORT = (function () {\n\t try {\n\t var buf = new ArrayBuffer(0)\n\t var arr = new Uint8Array(buf)\n\t arr.foo = function () { return 42 }\n\t return arr.foo() === 42 && // typed array instances can be augmented\n\t typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n\t new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n\t } catch (e) {\n\t return false\n\t }\n\t})()\n\n\t/**\n\t * Class: Buffer\n\t * =============\n\t *\n\t * The Buffer constructor returns instances of `Uint8Array` that are augmented\n\t * with function properties for all the node `Buffer` API functions. We use\n\t * `Uint8Array` so that square bracket notation works as expected -- it returns\n\t * a single octet.\n\t *\n\t * By augmenting the instances, we can avoid modifying the `Uint8Array`\n\t * prototype.\n\t */\n\tfunction Buffer (arg) {\n\t if (!(this instanceof Buffer)) {\n\t // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n\t if (arguments.length > 1) return new Buffer(arg, arguments[1])\n\t return new Buffer(arg)\n\t }\n\n\t this.length = 0\n\t this.parent = undefined\n\n\t // Common case.\n\t if (typeof arg === 'number') {\n\t return fromNumber(this, arg)\n\t }\n\n\t // Slightly less common case.\n\t if (typeof arg === 'string') {\n\t return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n\t }\n\n\t // Unusual.\n\t return fromObject(this, arg)\n\t}\n\n\tfunction fromNumber (that, length) {\n\t that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n\t if (!Buffer.TYPED_ARRAY_SUPPORT) {\n\t for (var i = 0; i < length; i++) {\n\t that[i] = 0\n\t }\n\t }\n\t return that\n\t}\n\n\tfunction fromString (that, string, encoding) {\n\t if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n\t // Assumption: byteLength() return value is always < kMaxLength.\n\t var length = byteLength(string, encoding) | 0\n\t that = allocate(that, length)\n\n\t that.write(string, encoding)\n\t return that\n\t}\n\n\tfunction fromObject (that, object) {\n\t if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n\t if (isArray(object)) return fromArray(that, object)\n\n\t if (object == null) {\n\t throw new TypeError('must start with number, buffer, array or string')\n\t }\n\n\t if (typeof ArrayBuffer !== 'undefined' && object.buffer instanceof ArrayBuffer) {\n\t return fromTypedArray(that, object)\n\t }\n\n\t if (object.length) return fromArrayLike(that, object)\n\n\t return fromJsonObject(that, object)\n\t}\n\n\tfunction fromBuffer (that, buffer) {\n\t var length = checked(buffer.length) | 0\n\t that = allocate(that, length)\n\t buffer.copy(that, 0, 0, length)\n\t return that\n\t}\n\n\tfunction fromArray (that, array) {\n\t var length = checked(array.length) | 0\n\t that = allocate(that, length)\n\t for (var i = 0; i < length; i += 1) {\n\t that[i] = array[i] & 255\n\t }\n\t return that\n\t}\n\n\t// Duplicate of fromArray() to keep fromArray() monomorphic.\n\tfunction fromTypedArray (that, array) {\n\t var length = checked(array.length) | 0\n\t that = allocate(that, length)\n\t // Truncating the elements is probably not what people expect from typed\n\t // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n\t // of the old Buffer constructor.\n\t for (var i = 0; i < length; i += 1) {\n\t that[i] = array[i] & 255\n\t }\n\t return that\n\t}\n\n\tfunction fromArrayLike (that, array) {\n\t var length = checked(array.length) | 0\n\t that = allocate(that, length)\n\t for (var i = 0; i < length; i += 1) {\n\t that[i] = array[i] & 255\n\t }\n\t return that\n\t}\n\n\t// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n\t// Returns a zero-length buffer for inputs that don't conform to the spec.\n\tfunction fromJsonObject (that, object) {\n\t var array\n\t var length = 0\n\n\t if (object.type === 'Buffer' && isArray(object.data)) {\n\t array = object.data\n\t length = checked(array.length) | 0\n\t }\n\t that = allocate(that, length)\n\n\t for (var i = 0; i < length; i += 1) {\n\t that[i] = array[i] & 255\n\t }\n\t return that\n\t}\n\n\tfunction allocate (that, length) {\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t // Return an augmented `Uint8Array` instance, for best performance\n\t that = Buffer._augment(new Uint8Array(length))\n\t } else {\n\t // Fallback: Return an object instance of the Buffer class\n\t that.length = length\n\t that._isBuffer = true\n\t }\n\n\t var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n\t if (fromPool) that.parent = rootParent\n\n\t return that\n\t}\n\n\tfunction checked (length) {\n\t // Note: cannot use `length < kMaxLength` here because that fails when\n\t // length is NaN (which is otherwise coerced to zero.)\n\t if (length >= kMaxLength) {\n\t throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n\t 'size: 0x' + kMaxLength.toString(16) + ' bytes')\n\t }\n\t return length | 0\n\t}\n\n\tfunction SlowBuffer (subject, encoding) {\n\t if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n\t var buf = new Buffer(subject, encoding)\n\t delete buf.parent\n\t return buf\n\t}\n\n\tBuffer.isBuffer = function isBuffer (b) {\n\t return !!(b != null && b._isBuffer)\n\t}\n\n\tBuffer.compare = function compare (a, b) {\n\t if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n\t throw new TypeError('Arguments must be Buffers')\n\t }\n\n\t if (a === b) return 0\n\n\t var x = a.length\n\t var y = b.length\n\n\t var i = 0\n\t var len = Math.min(x, y)\n\t while (i < len) {\n\t if (a[i] !== b[i]) break\n\n\t ++i\n\t }\n\n\t if (i !== len) {\n\t x = a[i]\n\t y = b[i]\n\t }\n\n\t if (x < y) return -1\n\t if (y < x) return 1\n\t return 0\n\t}\n\n\tBuffer.isEncoding = function isEncoding (encoding) {\n\t switch (String(encoding).toLowerCase()) {\n\t case 'hex':\n\t case 'utf8':\n\t case 'utf-8':\n\t case 'ascii':\n\t case 'binary':\n\t case 'base64':\n\t case 'raw':\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return true\n\t default:\n\t return false\n\t }\n\t}\n\n\tBuffer.concat = function concat (list, length) {\n\t if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n\t if (list.length === 0) {\n\t return new Buffer(0)\n\t } else if (list.length === 1) {\n\t return list[0]\n\t }\n\n\t var i\n\t if (length === undefined) {\n\t length = 0\n\t for (i = 0; i < list.length; i++) {\n\t length += list[i].length\n\t }\n\t }\n\n\t var buf = new Buffer(length)\n\t var pos = 0\n\t for (i = 0; i < list.length; i++) {\n\t var item = list[i]\n\t item.copy(buf, pos)\n\t pos += item.length\n\t }\n\t return buf\n\t}\n\n\tfunction byteLength (string, encoding) {\n\t if (typeof string !== 'string') string = String(string)\n\n\t if (string.length === 0) return 0\n\n\t switch (encoding || 'utf8') {\n\t case 'ascii':\n\t case 'binary':\n\t case 'raw':\n\t return string.length\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return string.length * 2\n\t case 'hex':\n\t return string.length >>> 1\n\t case 'utf8':\n\t case 'utf-8':\n\t return utf8ToBytes(string).length\n\t case 'base64':\n\t return base64ToBytes(string).length\n\t default:\n\t return string.length\n\t }\n\t}\n\tBuffer.byteLength = byteLength\n\n\t// pre-set for values that may exist in the future\n\tBuffer.prototype.length = undefined\n\tBuffer.prototype.parent = undefined\n\n\t// toString(encoding, start=0, end=buffer.length)\n\tBuffer.prototype.toString = function toString (encoding, start, end) {\n\t var loweredCase = false\n\n\t start = start | 0\n\t end = end === undefined || end === Infinity ? this.length : end | 0\n\n\t if (!encoding) encoding = 'utf8'\n\t if (start < 0) start = 0\n\t if (end > this.length) end = this.length\n\t if (end <= start) return ''\n\n\t while (true) {\n\t switch (encoding) {\n\t case 'hex':\n\t return hexSlice(this, start, end)\n\n\t case 'utf8':\n\t case 'utf-8':\n\t return utf8Slice(this, start, end)\n\n\t case 'ascii':\n\t return asciiSlice(this, start, end)\n\n\t case 'binary':\n\t return binarySlice(this, start, end)\n\n\t case 'base64':\n\t return base64Slice(this, start, end)\n\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return utf16leSlice(this, start, end)\n\n\t default:\n\t if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n\t encoding = (encoding + '').toLowerCase()\n\t loweredCase = true\n\t }\n\t }\n\t}\n\n\tBuffer.prototype.equals = function equals (b) {\n\t if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n\t if (this === b) return true\n\t return Buffer.compare(this, b) === 0\n\t}\n\n\tBuffer.prototype.inspect = function inspect () {\n\t var str = ''\n\t var max = exports.INSPECT_MAX_BYTES\n\t if (this.length > 0) {\n\t str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n\t if (this.length > max) str += ' ... '\n\t }\n\t return ''\n\t}\n\n\tBuffer.prototype.compare = function compare (b) {\n\t if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n\t if (this === b) return 0\n\t return Buffer.compare(this, b)\n\t}\n\n\tBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n\t if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n\t else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n\t byteOffset >>= 0\n\n\t if (this.length === 0) return -1\n\t if (byteOffset >= this.length) return -1\n\n\t // Negative offsets start from the end of the buffer\n\t if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n\t if (typeof val === 'string') {\n\t if (val.length === 0) return -1 // special case: looking for empty string always fails\n\t return String.prototype.indexOf.call(this, val, byteOffset)\n\t }\n\t if (Buffer.isBuffer(val)) {\n\t return arrayIndexOf(this, val, byteOffset)\n\t }\n\t if (typeof val === 'number') {\n\t if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n\t return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n\t }\n\t return arrayIndexOf(this, [ val ], byteOffset)\n\t }\n\n\t function arrayIndexOf (arr, val, byteOffset) {\n\t var foundIndex = -1\n\t for (var i = 0; byteOffset + i < arr.length; i++) {\n\t if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n\t if (foundIndex === -1) foundIndex = i\n\t if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n\t } else {\n\t foundIndex = -1\n\t }\n\t }\n\t return -1\n\t }\n\n\t throw new TypeError('val must be string, number or Buffer')\n\t}\n\n\t// `get` will be removed in Node 0.13+\n\tBuffer.prototype.get = function get (offset) {\n\t console.log('.get() is deprecated. Access using array indexes instead.')\n\t return this.readUInt8(offset)\n\t}\n\n\t// `set` will be removed in Node 0.13+\n\tBuffer.prototype.set = function set (v, offset) {\n\t console.log('.set() is deprecated. Access using array indexes instead.')\n\t return this.writeUInt8(v, offset)\n\t}\n\n\tfunction hexWrite (buf, string, offset, length) {\n\t offset = Number(offset) || 0\n\t var remaining = buf.length - offset\n\t if (!length) {\n\t length = remaining\n\t } else {\n\t length = Number(length)\n\t if (length > remaining) {\n\t length = remaining\n\t }\n\t }\n\n\t // must be an even number of digits\n\t var strLen = string.length\n\t if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n\t if (length > strLen / 2) {\n\t length = strLen / 2\n\t }\n\t for (var i = 0; i < length; i++) {\n\t var parsed = parseInt(string.substr(i * 2, 2), 16)\n\t if (isNaN(parsed)) throw new Error('Invalid hex string')\n\t buf[offset + i] = parsed\n\t }\n\t return i\n\t}\n\n\tfunction utf8Write (buf, string, offset, length) {\n\t return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n\t}\n\n\tfunction asciiWrite (buf, string, offset, length) {\n\t return blitBuffer(asciiToBytes(string), buf, offset, length)\n\t}\n\n\tfunction binaryWrite (buf, string, offset, length) {\n\t return asciiWrite(buf, string, offset, length)\n\t}\n\n\tfunction base64Write (buf, string, offset, length) {\n\t return blitBuffer(base64ToBytes(string), buf, offset, length)\n\t}\n\n\tfunction ucs2Write (buf, string, offset, length) {\n\t return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n\t}\n\n\tBuffer.prototype.write = function write (string, offset, length, encoding) {\n\t // Buffer#write(string)\n\t if (offset === undefined) {\n\t encoding = 'utf8'\n\t length = this.length\n\t offset = 0\n\t // Buffer#write(string, encoding)\n\t } else if (length === undefined && typeof offset === 'string') {\n\t encoding = offset\n\t length = this.length\n\t offset = 0\n\t // Buffer#write(string, offset[, length][, encoding])\n\t } else if (isFinite(offset)) {\n\t offset = offset | 0\n\t if (isFinite(length)) {\n\t length = length | 0\n\t if (encoding === undefined) encoding = 'utf8'\n\t } else {\n\t encoding = length\n\t length = undefined\n\t }\n\t // legacy write(string, encoding, offset, length) - remove in v0.13\n\t } else {\n\t var swap = encoding\n\t encoding = offset\n\t offset = length | 0\n\t length = swap\n\t }\n\n\t var remaining = this.length - offset\n\t if (length === undefined || length > remaining) length = remaining\n\n\t if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n\t throw new RangeError('attempt to write outside buffer bounds')\n\t }\n\n\t if (!encoding) encoding = 'utf8'\n\n\t var loweredCase = false\n\t for (;;) {\n\t switch (encoding) {\n\t case 'hex':\n\t return hexWrite(this, string, offset, length)\n\n\t case 'utf8':\n\t case 'utf-8':\n\t return utf8Write(this, string, offset, length)\n\n\t case 'ascii':\n\t return asciiWrite(this, string, offset, length)\n\n\t case 'binary':\n\t return binaryWrite(this, string, offset, length)\n\n\t case 'base64':\n\t // Warning: maxLength not taken into account in base64Write\n\t return base64Write(this, string, offset, length)\n\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return ucs2Write(this, string, offset, length)\n\n\t default:\n\t if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n\t encoding = ('' + encoding).toLowerCase()\n\t loweredCase = true\n\t }\n\t }\n\t}\n\n\tBuffer.prototype.toJSON = function toJSON () {\n\t return {\n\t type: 'Buffer',\n\t data: Array.prototype.slice.call(this._arr || this, 0)\n\t }\n\t}\n\n\tfunction base64Slice (buf, start, end) {\n\t if (start === 0 && end === buf.length) {\n\t return base64.fromByteArray(buf)\n\t } else {\n\t return base64.fromByteArray(buf.slice(start, end))\n\t }\n\t}\n\n\tfunction utf8Slice (buf, start, end) {\n\t var res = ''\n\t var tmp = ''\n\t end = Math.min(buf.length, end)\n\n\t for (var i = start; i < end; i++) {\n\t if (buf[i] <= 0x7F) {\n\t res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])\n\t tmp = ''\n\t } else {\n\t tmp += '%' + buf[i].toString(16)\n\t }\n\t }\n\n\t return res + decodeUtf8Char(tmp)\n\t}\n\n\tfunction asciiSlice (buf, start, end) {\n\t var ret = ''\n\t end = Math.min(buf.length, end)\n\n\t for (var i = start; i < end; i++) {\n\t ret += String.fromCharCode(buf[i] & 0x7F)\n\t }\n\t return ret\n\t}\n\n\tfunction binarySlice (buf, start, end) {\n\t var ret = ''\n\t end = Math.min(buf.length, end)\n\n\t for (var i = start; i < end; i++) {\n\t ret += String.fromCharCode(buf[i])\n\t }\n\t return ret\n\t}\n\n\tfunction hexSlice (buf, start, end) {\n\t var len = buf.length\n\n\t if (!start || start < 0) start = 0\n\t if (!end || end < 0 || end > len) end = len\n\n\t var out = ''\n\t for (var i = start; i < end; i++) {\n\t out += toHex(buf[i])\n\t }\n\t return out\n\t}\n\n\tfunction utf16leSlice (buf, start, end) {\n\t var bytes = buf.slice(start, end)\n\t var res = ''\n\t for (var i = 0; i < bytes.length; i += 2) {\n\t res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n\t }\n\t return res\n\t}\n\n\tBuffer.prototype.slice = function slice (start, end) {\n\t var len = this.length\n\t start = ~~start\n\t end = end === undefined ? len : ~~end\n\n\t if (start < 0) {\n\t start += len\n\t if (start < 0) start = 0\n\t } else if (start > len) {\n\t start = len\n\t }\n\n\t if (end < 0) {\n\t end += len\n\t if (end < 0) end = 0\n\t } else if (end > len) {\n\t end = len\n\t }\n\n\t if (end < start) end = start\n\n\t var newBuf\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t newBuf = Buffer._augment(this.subarray(start, end))\n\t } else {\n\t var sliceLen = end - start\n\t newBuf = new Buffer(sliceLen, undefined)\n\t for (var i = 0; i < sliceLen; i++) {\n\t newBuf[i] = this[i + start]\n\t }\n\t }\n\n\t if (newBuf.length) newBuf.parent = this.parent || this\n\n\t return newBuf\n\t}\n\n\t/*\n\t * Need to make sure that buffer isn't trying to write out of bounds.\n\t */\n\tfunction checkOffset (offset, ext, length) {\n\t if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n\t if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n\t}\n\n\tBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n\t offset = offset | 0\n\t byteLength = byteLength | 0\n\t if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n\t var val = this[offset]\n\t var mul = 1\n\t var i = 0\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t val += this[offset + i] * mul\n\t }\n\n\t return val\n\t}\n\n\tBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n\t offset = offset | 0\n\t byteLength = byteLength | 0\n\t if (!noAssert) {\n\t checkOffset(offset, byteLength, this.length)\n\t }\n\n\t var val = this[offset + --byteLength]\n\t var mul = 1\n\t while (byteLength > 0 && (mul *= 0x100)) {\n\t val += this[offset + --byteLength] * mul\n\t }\n\n\t return val\n\t}\n\n\tBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 1, this.length)\n\t return this[offset]\n\t}\n\n\tBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 2, this.length)\n\t return this[offset] | (this[offset + 1] << 8)\n\t}\n\n\tBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 2, this.length)\n\t return (this[offset] << 8) | this[offset + 1]\n\t}\n\n\tBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 4, this.length)\n\n\t return ((this[offset]) |\n\t (this[offset + 1] << 8) |\n\t (this[offset + 2] << 16)) +\n\t (this[offset + 3] * 0x1000000)\n\t}\n\n\tBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 4, this.length)\n\n\t return (this[offset] * 0x1000000) +\n\t ((this[offset + 1] << 16) |\n\t (this[offset + 2] << 8) |\n\t this[offset + 3])\n\t}\n\n\tBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n\t offset = offset | 0\n\t byteLength = byteLength | 0\n\t if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n\t var val = this[offset]\n\t var mul = 1\n\t var i = 0\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t val += this[offset + i] * mul\n\t }\n\t mul *= 0x80\n\n\t if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n\t return val\n\t}\n\n\tBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n\t offset = offset | 0\n\t byteLength = byteLength | 0\n\t if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n\t var i = byteLength\n\t var mul = 1\n\t var val = this[offset + --i]\n\t while (i > 0 && (mul *= 0x100)) {\n\t val += this[offset + --i] * mul\n\t }\n\t mul *= 0x80\n\n\t if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n\t return val\n\t}\n\n\tBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 1, this.length)\n\t if (!(this[offset] & 0x80)) return (this[offset])\n\t return ((0xff - this[offset] + 1) * -1)\n\t}\n\n\tBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 2, this.length)\n\t var val = this[offset] | (this[offset + 1] << 8)\n\t return (val & 0x8000) ? val | 0xFFFF0000 : val\n\t}\n\n\tBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 2, this.length)\n\t var val = this[offset + 1] | (this[offset] << 8)\n\t return (val & 0x8000) ? val | 0xFFFF0000 : val\n\t}\n\n\tBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 4, this.length)\n\n\t return (this[offset]) |\n\t (this[offset + 1] << 8) |\n\t (this[offset + 2] << 16) |\n\t (this[offset + 3] << 24)\n\t}\n\n\tBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 4, this.length)\n\n\t return (this[offset] << 24) |\n\t (this[offset + 1] << 16) |\n\t (this[offset + 2] << 8) |\n\t (this[offset + 3])\n\t}\n\n\tBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 4, this.length)\n\t return ieee754.read(this, offset, true, 23, 4)\n\t}\n\n\tBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 4, this.length)\n\t return ieee754.read(this, offset, false, 23, 4)\n\t}\n\n\tBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 8, this.length)\n\t return ieee754.read(this, offset, true, 52, 8)\n\t}\n\n\tBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n\t if (!noAssert) checkOffset(offset, 8, this.length)\n\t return ieee754.read(this, offset, false, 52, 8)\n\t}\n\n\tfunction checkInt (buf, value, offset, ext, max, min) {\n\t if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n\t if (value > max || value < min) throw new RangeError('value is out of bounds')\n\t if (offset + ext > buf.length) throw new RangeError('index out of range')\n\t}\n\n\tBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t byteLength = byteLength | 0\n\t if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n\t var mul = 1\n\t var i = 0\n\t this[offset] = value & 0xFF\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t this[offset + i] = (value / mul) & 0xFF\n\t }\n\n\t return offset + byteLength\n\t}\n\n\tBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t byteLength = byteLength | 0\n\t if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n\t var i = byteLength - 1\n\t var mul = 1\n\t this[offset + i] = value & 0xFF\n\t while (--i >= 0 && (mul *= 0x100)) {\n\t this[offset + i] = (value / mul) & 0xFF\n\t }\n\n\t return offset + byteLength\n\t}\n\n\tBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n\t if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n\t this[offset] = value\n\t return offset + 1\n\t}\n\n\tfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n\t if (value < 0) value = 0xffff + value + 1\n\t for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n\t buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n\t (littleEndian ? i : 1 - i) * 8\n\t }\n\t}\n\n\tBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = value\n\t this[offset + 1] = (value >>> 8)\n\t } else {\n\t objectWriteUInt16(this, value, offset, true)\n\t }\n\t return offset + 2\n\t}\n\n\tBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = (value >>> 8)\n\t this[offset + 1] = value\n\t } else {\n\t objectWriteUInt16(this, value, offset, false)\n\t }\n\t return offset + 2\n\t}\n\n\tfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n\t if (value < 0) value = 0xffffffff + value + 1\n\t for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n\t buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n\t }\n\t}\n\n\tBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset + 3] = (value >>> 24)\n\t this[offset + 2] = (value >>> 16)\n\t this[offset + 1] = (value >>> 8)\n\t this[offset] = value\n\t } else {\n\t objectWriteUInt32(this, value, offset, true)\n\t }\n\t return offset + 4\n\t}\n\n\tBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = (value >>> 24)\n\t this[offset + 1] = (value >>> 16)\n\t this[offset + 2] = (value >>> 8)\n\t this[offset + 3] = value\n\t } else {\n\t objectWriteUInt32(this, value, offset, false)\n\t }\n\t return offset + 4\n\t}\n\n\tBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) {\n\t var limit = Math.pow(2, 8 * byteLength - 1)\n\n\t checkInt(this, value, offset, byteLength, limit - 1, -limit)\n\t }\n\n\t var i = 0\n\t var mul = 1\n\t var sub = value < 0 ? 1 : 0\n\t this[offset] = value & 0xFF\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n\t }\n\n\t return offset + byteLength\n\t}\n\n\tBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) {\n\t var limit = Math.pow(2, 8 * byteLength - 1)\n\n\t checkInt(this, value, offset, byteLength, limit - 1, -limit)\n\t }\n\n\t var i = byteLength - 1\n\t var mul = 1\n\t var sub = value < 0 ? 1 : 0\n\t this[offset + i] = value & 0xFF\n\t while (--i >= 0 && (mul *= 0x100)) {\n\t this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n\t }\n\n\t return offset + byteLength\n\t}\n\n\tBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n\t if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n\t if (value < 0) value = 0xff + value + 1\n\t this[offset] = value\n\t return offset + 1\n\t}\n\n\tBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = value\n\t this[offset + 1] = (value >>> 8)\n\t } else {\n\t objectWriteUInt16(this, value, offset, true)\n\t }\n\t return offset + 2\n\t}\n\n\tBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = (value >>> 8)\n\t this[offset + 1] = value\n\t } else {\n\t objectWriteUInt16(this, value, offset, false)\n\t }\n\t return offset + 2\n\t}\n\n\tBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = value\n\t this[offset + 1] = (value >>> 8)\n\t this[offset + 2] = (value >>> 16)\n\t this[offset + 3] = (value >>> 24)\n\t } else {\n\t objectWriteUInt32(this, value, offset, true)\n\t }\n\t return offset + 4\n\t}\n\n\tBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n\t value = +value\n\t offset = offset | 0\n\t if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n\t if (value < 0) value = 0xffffffff + value + 1\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t this[offset] = (value >>> 24)\n\t this[offset + 1] = (value >>> 16)\n\t this[offset + 2] = (value >>> 8)\n\t this[offset + 3] = value\n\t } else {\n\t objectWriteUInt32(this, value, offset, false)\n\t }\n\t return offset + 4\n\t}\n\n\tfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n\t if (value > max || value < min) throw new RangeError('value is out of bounds')\n\t if (offset + ext > buf.length) throw new RangeError('index out of range')\n\t if (offset < 0) throw new RangeError('index out of range')\n\t}\n\n\tfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n\t if (!noAssert) {\n\t checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n\t }\n\t ieee754.write(buf, value, offset, littleEndian, 23, 4)\n\t return offset + 4\n\t}\n\n\tBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n\t return writeFloat(this, value, offset, true, noAssert)\n\t}\n\n\tBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n\t return writeFloat(this, value, offset, false, noAssert)\n\t}\n\n\tfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n\t if (!noAssert) {\n\t checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n\t }\n\t ieee754.write(buf, value, offset, littleEndian, 52, 8)\n\t return offset + 8\n\t}\n\n\tBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n\t return writeDouble(this, value, offset, true, noAssert)\n\t}\n\n\tBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n\t return writeDouble(this, value, offset, false, noAssert)\n\t}\n\n\t// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\tBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n\t if (!start) start = 0\n\t if (!end && end !== 0) end = this.length\n\t if (targetStart >= target.length) targetStart = target.length\n\t if (!targetStart) targetStart = 0\n\t if (end > 0 && end < start) end = start\n\n\t // Copy 0 bytes; we're done\n\t if (end === start) return 0\n\t if (target.length === 0 || this.length === 0) return 0\n\n\t // Fatal error conditions\n\t if (targetStart < 0) {\n\t throw new RangeError('targetStart out of bounds')\n\t }\n\t if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n\t if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n\t // Are we oob?\n\t if (end > this.length) end = this.length\n\t if (target.length - targetStart < end - start) {\n\t end = target.length - targetStart + start\n\t }\n\n\t var len = end - start\n\n\t if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n\t for (var i = 0; i < len; i++) {\n\t target[i + targetStart] = this[i + start]\n\t }\n\t } else {\n\t target._set(this.subarray(start, start + len), targetStart)\n\t }\n\n\t return len\n\t}\n\n\t// fill(value, start=0, end=buffer.length)\n\tBuffer.prototype.fill = function fill (value, start, end) {\n\t if (!value) value = 0\n\t if (!start) start = 0\n\t if (!end) end = this.length\n\n\t if (end < start) throw new RangeError('end < start')\n\n\t // Fill 0 bytes; we're done\n\t if (end === start) return\n\t if (this.length === 0) return\n\n\t if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n\t if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n\t var i\n\t if (typeof value === 'number') {\n\t for (i = start; i < end; i++) {\n\t this[i] = value\n\t }\n\t } else {\n\t var bytes = utf8ToBytes(value.toString())\n\t var len = bytes.length\n\t for (i = start; i < end; i++) {\n\t this[i] = bytes[i % len]\n\t }\n\t }\n\n\t return this\n\t}\n\n\t/**\n\t * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\n\t * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\n\t */\n\tBuffer.prototype.toArrayBuffer = function toArrayBuffer () {\n\t if (typeof Uint8Array !== 'undefined') {\n\t if (Buffer.TYPED_ARRAY_SUPPORT) {\n\t return (new Buffer(this)).buffer\n\t } else {\n\t var buf = new Uint8Array(this.length)\n\t for (var i = 0, len = buf.length; i < len; i += 1) {\n\t buf[i] = this[i]\n\t }\n\t return buf.buffer\n\t }\n\t } else {\n\t throw new TypeError('Buffer.toArrayBuffer not supported in this browser')\n\t }\n\t}\n\n\t// HELPER FUNCTIONS\n\t// ================\n\n\tvar BP = Buffer.prototype\n\n\t/**\n\t * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\n\t */\n\tBuffer._augment = function _augment (arr) {\n\t arr.constructor = Buffer\n\t arr._isBuffer = true\n\n\t // save reference to original Uint8Array set method before overwriting\n\t arr._set = arr.set\n\n\t // deprecated, will be removed in node 0.13+\n\t arr.get = BP.get\n\t arr.set = BP.set\n\n\t arr.write = BP.write\n\t arr.toString = BP.toString\n\t arr.toLocaleString = BP.toString\n\t arr.toJSON = BP.toJSON\n\t arr.equals = BP.equals\n\t arr.compare = BP.compare\n\t arr.indexOf = BP.indexOf\n\t arr.copy = BP.copy\n\t arr.slice = BP.slice\n\t arr.readUIntLE = BP.readUIntLE\n\t arr.readUIntBE = BP.readUIntBE\n\t arr.readUInt8 = BP.readUInt8\n\t arr.readUInt16LE = BP.readUInt16LE\n\t arr.readUInt16BE = BP.readUInt16BE\n\t arr.readUInt32LE = BP.readUInt32LE\n\t arr.readUInt32BE = BP.readUInt32BE\n\t arr.readIntLE = BP.readIntLE\n\t arr.readIntBE = BP.readIntBE\n\t arr.readInt8 = BP.readInt8\n\t arr.readInt16LE = BP.readInt16LE\n\t arr.readInt16BE = BP.readInt16BE\n\t arr.readInt32LE = BP.readInt32LE\n\t arr.readInt32BE = BP.readInt32BE\n\t arr.readFloatLE = BP.readFloatLE\n\t arr.readFloatBE = BP.readFloatBE\n\t arr.readDoubleLE = BP.readDoubleLE\n\t arr.readDoubleBE = BP.readDoubleBE\n\t arr.writeUInt8 = BP.writeUInt8\n\t arr.writeUIntLE = BP.writeUIntLE\n\t arr.writeUIntBE = BP.writeUIntBE\n\t arr.writeUInt16LE = BP.writeUInt16LE\n\t arr.writeUInt16BE = BP.writeUInt16BE\n\t arr.writeUInt32LE = BP.writeUInt32LE\n\t arr.writeUInt32BE = BP.writeUInt32BE\n\t arr.writeIntLE = BP.writeIntLE\n\t arr.writeIntBE = BP.writeIntBE\n\t arr.writeInt8 = BP.writeInt8\n\t arr.writeInt16LE = BP.writeInt16LE\n\t arr.writeInt16BE = BP.writeInt16BE\n\t arr.writeInt32LE = BP.writeInt32LE\n\t arr.writeInt32BE = BP.writeInt32BE\n\t arr.writeFloatLE = BP.writeFloatLE\n\t arr.writeFloatBE = BP.writeFloatBE\n\t arr.writeDoubleLE = BP.writeDoubleLE\n\t arr.writeDoubleBE = BP.writeDoubleBE\n\t arr.fill = BP.fill\n\t arr.inspect = BP.inspect\n\t arr.toArrayBuffer = BP.toArrayBuffer\n\n\t return arr\n\t}\n\n\tvar INVALID_BASE64_RE = /[^+\\/0-9A-z\\-]/g\n\n\tfunction base64clean (str) {\n\t // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\t str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n\t // Node converts strings with length < 2 to ''\n\t if (str.length < 2) return ''\n\t // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\t while (str.length % 4 !== 0) {\n\t str = str + '='\n\t }\n\t return str\n\t}\n\n\tfunction stringtrim (str) {\n\t if (str.trim) return str.trim()\n\t return str.replace(/^\\s+|\\s+$/g, '')\n\t}\n\n\tfunction toHex (n) {\n\t if (n < 16) return '0' + n.toString(16)\n\t return n.toString(16)\n\t}\n\n\tfunction utf8ToBytes (string, units) {\n\t units = units || Infinity\n\t var codePoint\n\t var length = string.length\n\t var leadSurrogate = null\n\t var bytes = []\n\t var i = 0\n\n\t for (; i < length; i++) {\n\t codePoint = string.charCodeAt(i)\n\n\t // is surrogate component\n\t if (codePoint > 0xD7FF && codePoint < 0xE000) {\n\t // last char was a lead\n\t if (leadSurrogate) {\n\t // 2 leads in a row\n\t if (codePoint < 0xDC00) {\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n\t leadSurrogate = codePoint\n\t continue\n\t } else {\n\t // valid surrogate pair\n\t codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000\n\t leadSurrogate = null\n\t }\n\t } else {\n\t // no lead yet\n\n\t if (codePoint > 0xDBFF) {\n\t // unexpected trail\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n\t continue\n\t } else if (i + 1 === length) {\n\t // unpaired lead\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n\t continue\n\t } else {\n\t // valid lead\n\t leadSurrogate = codePoint\n\t continue\n\t }\n\t }\n\t } else if (leadSurrogate) {\n\t // valid bmp char, but last char was a lead\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n\t leadSurrogate = null\n\t }\n\n\t // encode utf8\n\t if (codePoint < 0x80) {\n\t if ((units -= 1) < 0) break\n\t bytes.push(codePoint)\n\t } else if (codePoint < 0x800) {\n\t if ((units -= 2) < 0) break\n\t bytes.push(\n\t codePoint >> 0x6 | 0xC0,\n\t codePoint & 0x3F | 0x80\n\t )\n\t } else if (codePoint < 0x10000) {\n\t if ((units -= 3) < 0) break\n\t bytes.push(\n\t codePoint >> 0xC | 0xE0,\n\t codePoint >> 0x6 & 0x3F | 0x80,\n\t codePoint & 0x3F | 0x80\n\t )\n\t } else if (codePoint < 0x200000) {\n\t if ((units -= 4) < 0) break\n\t bytes.push(\n\t codePoint >> 0x12 | 0xF0,\n\t codePoint >> 0xC & 0x3F | 0x80,\n\t codePoint >> 0x6 & 0x3F | 0x80,\n\t codePoint & 0x3F | 0x80\n\t )\n\t } else {\n\t throw new Error('Invalid code point')\n\t }\n\t }\n\n\t return bytes\n\t}\n\n\tfunction asciiToBytes (str) {\n\t var byteArray = []\n\t for (var i = 0; i < str.length; i++) {\n\t // Node's code seems to be doing this and not & 0x7F..\n\t byteArray.push(str.charCodeAt(i) & 0xFF)\n\t }\n\t return byteArray\n\t}\n\n\tfunction utf16leToBytes (str, units) {\n\t var c, hi, lo\n\t var byteArray = []\n\t for (var i = 0; i < str.length; i++) {\n\t if ((units -= 2) < 0) break\n\n\t c = str.charCodeAt(i)\n\t hi = c >> 8\n\t lo = c % 256\n\t byteArray.push(lo)\n\t byteArray.push(hi)\n\t }\n\n\t return byteArray\n\t}\n\n\tfunction base64ToBytes (str) {\n\t return base64.toByteArray(base64clean(str))\n\t}\n\n\tfunction blitBuffer (src, dst, offset, length) {\n\t for (var i = 0; i < length; i++) {\n\t if ((i + offset >= dst.length) || (i >= src.length)) break\n\t dst[i + offset] = src[i]\n\t }\n\t return i\n\t}\n\n\tfunction decodeUtf8Char (str) {\n\t try {\n\t return decodeURIComponent(str)\n\t } catch (err) {\n\t return String.fromCharCode(0xFFFD) // UTF 8 invalid char\n\t }\n\t}\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4).Buffer))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* jslint node: true */\n\t'use strict';\n\n\tvar _ = __webpack_require__(11);\n\tvar FontWrapper = __webpack_require__(16);\n\n\tfunction typeName(bold, italics){\n\t\tvar type = 'normal';\n\t\tif (bold && italics) type = 'bolditalics';\n\t\telse if (bold) type = 'bold';\n\t\telse if (italics) type = 'italics';\n\t\treturn type;\n\t}\n\n\tfunction FontProvider(fontDescriptors, pdfDoc) {\n\t\tthis.fonts = {};\n\t\tthis.pdfDoc = pdfDoc;\n\t\tthis.fontWrappers = {};\n\n\t\tfor(var font in fontDescriptors) {\n\t\t\tif (fontDescriptors.hasOwnProperty(font)) {\n\t\t\t\tvar fontDef = fontDescriptors[font];\n\n\t\t\t\tthis.fonts[font] = {\n\t\t\t\t\tnormal: fontDef.normal,\n\t\t\t\t\tbold: fontDef.bold,\n\t\t\t\t\titalics: fontDef.italics,\n\t\t\t\t\tbolditalics: fontDef.bolditalics\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tFontProvider.prototype.provideFont = function(familyName, bold, italics) {\n\t if (!this.fonts[familyName]) return this.pdfDoc._font;\n\t\tvar type = typeName(bold, italics);\n\n\t this.fontWrappers[familyName] = this.fontWrappers[familyName] || {};\n\n\t if (!this.fontWrappers[familyName][type]) {\n\t\t\tthis.fontWrappers[familyName][type] = new FontWrapper(this.pdfDoc, this.fonts[familyName][type], familyName + '(' + type + ')');\n\t\t}\n\n\t return this.fontWrappers[familyName][type];\n\t};\n\n\tFontProvider.prototype.setFontRefsToPdfDoc = function(){\n\t var self = this;\n\n\t _.each(self.fontWrappers, function(fontFamily) {\n\t _.each(fontFamily, function(fontWrapper){\n\t _.each(fontWrapper.pdfFonts, function(font){\n\t if (!self.pdfDoc.page.fonts[font.id]) {\n\t self.pdfDoc.page.fonts[font.id] = font.ref();\n\t }\n\t });\n\t });\n\t });\n\t};\n\n\tmodule.exports = FontProvider;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* jslint node: true */\n\t'use strict';\n\n\tvar _ = __webpack_require__(11);\n\tvar TraversalTracker = __webpack_require__(18);\n\tvar DocMeasure = __webpack_require__(19);\n\tvar DocumentContext = __webpack_require__(20);\n\tvar PageElementWriter = __webpack_require__(21);\n\tvar ColumnCalculator = __webpack_require__(22);\n\tvar TableProcessor = __webpack_require__(23);\n\tvar Line = __webpack_require__(24);\n\tvar pack = __webpack_require__(25).pack;\n\tvar offsetVector = __webpack_require__(25).offsetVector;\n\tvar fontStringify = __webpack_require__(25).fontStringify;\n\tvar isFunction = __webpack_require__(25).isFunction;\n\tvar TextTools = __webpack_require__(26);\n\tvar StyleContextStack = __webpack_require__(27);\n\n\tfunction addAll(target, otherArray){\n\t _.each(otherArray, function(item){\n\t target.push(item);\n\t });\n\t}\n\n\t/**\n\t * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object\n\t * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF\n\t *\n\t * @param {Object} pageSize - an object defining page width and height\n\t * @param {Object} pageMargins - an object defining top, left, right and bottom margins\n\t */\n\tfunction LayoutBuilder(pageSize, pageMargins, imageMeasure) {\n\t\tthis.pageSize = pageSize;\n\t\tthis.pageMargins = pageMargins;\n\t\tthis.tracker = new TraversalTracker();\n\t this.imageMeasure = imageMeasure;\n\t this.tableLayouts = {};\n\t}\n\n\tLayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {\n\t this.tableLayouts = pack(this.tableLayouts, tableLayouts);\n\t};\n\n\t/**\n\t * Executes layout engine on document-definition-object and creates an array of pages\n\t * containing positioned Blocks, Lines and inlines\n\t *\n\t * @param {Object} docStructure document-definition-object\n\t * @param {Object} fontProvider font provider\n\t * @param {Object} styleDictionary dictionary with style definitions\n\t * @param {Object} defaultStyle default style definition\n\t * @return {Array} an array of pages\n\t */\n\tLayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\n\n\t function addPageBreaksIfNecessary(linearNodeList, pages) {\n\t linearNodeList = _.reject(linearNodeList, function(node){\n\t return _.isEmpty(node.positions);\n\t });\n\n\t _.each(linearNodeList, function(node) {\n\t var nodeInfo = _.pick(node, [\n\t 'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'columns',\n\t 'headlineLevel', 'style', 'pageBreak', 'pageOrientation',\n\t 'width', 'height'\n\t ]);\n\t nodeInfo.startPosition = _.first(node.positions);\n\t nodeInfo.pageNumbers = _.chain(node.positions).map('pageNumber').uniq().value();\n\t nodeInfo.pages = pages.length;\n\t nodeInfo.stack = _.isArray(node.stack);\n\n\t node.nodeInfo = nodeInfo;\n\t });\n\n\t return _.any(linearNodeList, function (node, index, followingNodeList) {\n\t if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {\n\t node.pageBreakCalculated = true;\n\t var pageNumber = _.first(node.nodeInfo.pageNumbers);\n\n\t\t\t\t\tvar followingNodesOnPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {\n\t return _.contains(node0.nodeInfo.pageNumbers, pageNumber);\n\t }).value();\n\n\t var nodesOnNextPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {\n\t return _.contains(node0.nodeInfo.pageNumbers, pageNumber + 1);\n\t }).value();\n\n\t var previousNodesOnPage = _.chain(followingNodeList).take(index).filter(function (node0) {\n\t return _.contains(node0.nodeInfo.pageNumbers, pageNumber);\n\t }).value();\n\n\t if (pageBreakBeforeFct(node.nodeInfo,\n\t _.map(followingNodesOnPage, 'nodeInfo'),\n\t _.map(nodesOnNextPage, 'nodeInfo'),\n\t _.map(previousNodesOnPage, 'nodeInfo'))) {\n\t node.pageBreak = 'before';\n\t return true;\n\t }\n\t }\n\t });\n\t }\n\n\t if(!isFunction(pageBreakBeforeFct)){\n\t pageBreakBeforeFct = function(){\n\t return false;\n\t };\n\t }\n\n\t this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.tableLayouts, images);\n\n\n\t function resetXYs(result) {\n\t _.each(result.linearNodeList, function (node) {\n\t node.resetXY();\n\t });\n\t }\n\n\t var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\n\t while(addPageBreaksIfNecessary(result.linearNodeList, result.pages)){\n\t resetXYs(result);\n\t result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\n\t }\n\n\t\treturn result.pages;\n\t};\n\n\tLayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\n\n\t this.linearNodeList = [];\n\t docStructure = this.docMeasure.measureDocument(docStructure);\n\n\t this.writer = new PageElementWriter(\n\t new DocumentContext(this.pageSize, this.pageMargins), this.tracker);\n\n\t var _this = this;\n\t this.writer.context().tracker.startTracking('pageAdded', function() {\n\t _this.addBackground(background);\n\t });\n\n\t this.addBackground(background);\n\t this.processNode(docStructure);\n\t this.addHeadersAndFooters(header, footer);\n\t /* jshint eqnull:true */\n\t if(watermark != null)\n\t this.addWatermark(watermark, fontProvider);\n\n\t return {pages: this.writer.context().pages, linearNodeList: this.linearNodeList};\n\t};\n\n\n\tLayoutBuilder.prototype.addBackground = function(background) {\n\t var backgroundGetter = isFunction(background) ? background : function() { return background; };\n\n\t var pageBackground = backgroundGetter(this.writer.context().page + 1);\n\n\t if (pageBackground) {\n\t var pageSize = this.writer.context().getCurrentPage().pageSize;\n\t this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);\n\t this.processNode(this.docMeasure.measureDocument(pageBackground));\n\t this.writer.commitUnbreakableBlock(0, 0);\n\t }\n\t};\n\n\tLayoutBuilder.prototype.addStaticRepeatable = function(headerOrFooter, sizeFunction) {\n\t this.addDynamicRepeatable(function() { return headerOrFooter; }, sizeFunction);\n\t};\n\n\tLayoutBuilder.prototype.addDynamicRepeatable = function(nodeGetter, sizeFunction) {\n\t var pages = this.writer.context().pages;\n\n\t for(var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {\n\t this.writer.context().page = pageIndex;\n\n\t var node = nodeGetter(pageIndex + 1, l);\n\n\t if (node) {\n\t var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);\n\t this.writer.beginUnbreakableBlock(sizes.width, sizes.height);\n\t this.processNode(this.docMeasure.measureDocument(node));\n\t this.writer.commitUnbreakableBlock(sizes.x, sizes.y);\n\t }\n\t }\n\t};\n\n\tLayoutBuilder.prototype.addHeadersAndFooters = function(header, footer) {\n\t var headerSizeFct = function(pageSize, pageMargins){\n\t return {\n\t x: 0,\n\t y: 0,\n\t width: pageSize.width,\n\t height: pageMargins.top\n\t };\n\t };\n\n\t var footerSizeFct = function (pageSize, pageMargins) {\n\t return {\n\t x: 0,\n\t y: pageSize.height - pageMargins.bottom,\n\t width: pageSize.width,\n\t height: pageMargins.bottom\n\t };\n\t };\n\n\t if(isFunction(header)) {\n\t this.addDynamicRepeatable(header, headerSizeFct);\n\t } else if(header) {\n\t this.addStaticRepeatable(header, headerSizeFct);\n\t }\n\n\t if(isFunction(footer)) {\n\t this.addDynamicRepeatable(footer, footerSizeFct);\n\t } else if(footer) {\n\t this.addStaticRepeatable(footer, footerSizeFct);\n\t }\n\t};\n\n\tLayoutBuilder.prototype.addWatermark = function(watermark, fontProvider){\n\t var defaultFont = Object.getOwnPropertyNames(fontProvider.fonts)[0]; // TODO allow selection of other font\n\t var watermarkObject = {\n\t text: watermark,\n\t font: fontProvider.provideFont(fontProvider[defaultFont], false, false),\n\t size: getSize(this.pageSize, watermark, fontProvider)\n\t };\n\n\t var pages = this.writer.context().pages;\n\t for(var i = 0, l = pages.length; i < l; i++) {\n\t pages[i].watermark = watermarkObject;\n\t }\n\n\t function getSize(pageSize, watermark, fontProvider){\n\t var width = pageSize.width;\n\t var height = pageSize.height;\n\t var targetWidth = Math.sqrt(width*width + height*height)*0.8; /* page diagnoal * sample factor */\n\t var textTools = new TextTools(fontProvider);\n\t var styleContextStack = new StyleContextStack();\n\t var size;\n\n\t /**\n\t * Binary search the best font size.\n\t * Initial bounds [0, 1000]\n\t * Break when range < 1\n\t */\n\t var a = 0;\n\t var b = 1000;\n\t var c = (a+b)/2;\n\t while(Math.abs(a - b) > 1){\n\t styleContextStack.push({\n\t fontSize: c\n\t });\n\t size = textTools.sizeOfString(watermark, styleContextStack);\n\t if(size.width > targetWidth){\n\t b = c;\n\t c = (a+b)/2;\n\t }\n\t else if(size.width < targetWidth){\n\t a = c;\n\t c = (a+b)/2;\n\t }\n\t styleContextStack.pop();\n\t }\n\t /*\n\t End binary search\n\t */\n\t return {size: size, fontSize: c};\n\t }\n\t};\n\n\tfunction decorateNode(node){\n\t var x = node.x, y = node.y;\n\t node.positions = [];\n\n\t _.each(node.canvas, function(vector){\n\t var x = vector.x, y = vector.y;\n\t vector.resetXY = function(){\n\t vector.x = x;\n\t vector.y = y;\n\t };\n\t });\n\n\t node.resetXY = function(){\n\t node.x = x;\n\t node.y = y;\n\t _.each(node.canvas, function(vector){\n\t vector.resetXY();\n\t });\n\t };\n\t}\n\n\tLayoutBuilder.prototype.processNode = function(node) {\n\t var self = this;\n\n\t this.linearNodeList.push(node);\n\t decorateNode(node);\n\n\t applyMargins(function() {\n\t var absPosition = node.absolutePosition;\n\t if(absPosition){\n\t self.writer.context().beginDetachedBlock();\n\t self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);\n\t }\n\n\t if (node.stack) {\n\t self.processVerticalContainer(node);\n\t } else if (node.columns) {\n\t self.processColumns(node);\n\t } else if (node.ul) {\n\t self.processList(false, node);\n\t } else if (node.ol) {\n\t self.processList(true, node);\n\t } else if (node.table) {\n\t self.processTable(node);\n\t } else if (node.text !== undefined) {\n\t self.processLeaf(node);\n\t } else if (node.image) {\n\t self.processImage(node);\n\t } else if (node.canvas) {\n\t self.processCanvas(node);\n\t } else if (node.qr) {\n\t self.processQr(node);\n\t }else if (!node._span) {\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t\t\t}\n\n\t if(absPosition){\n\t self.writer.context().endDetachedBlock();\n\t }\n\t\t});\n\n\t\tfunction applyMargins(callback) {\n\t\t\tvar margin = node._margin;\n\n\t if (node.pageBreak === 'before') {\n\t self.writer.moveToNextPage(node.pageOrientation);\n\t }\n\n\t\t\tif (margin) {\n\t\t\t\tself.writer.context().moveDown(margin[1]);\n\t\t\t\tself.writer.context().addMargin(margin[0], margin[2]);\n\t\t\t}\n\n\t\t\tcallback();\n\n\t\t\tif(margin) {\n\t\t\t\tself.writer.context().addMargin(-margin[0], -margin[2]);\n\t\t\t\tself.writer.context().moveDown(margin[3]);\n\t\t\t}\n\n\t if (node.pageBreak === 'after') {\n\t self.writer.moveToNextPage(node.pageOrientation);\n\t }\n\t\t}\n\t};\n\n\t// vertical container\n\tLayoutBuilder.prototype.processVerticalContainer = function(node) {\n\t\tvar self = this;\n\t\tnode.stack.forEach(function(item) {\n\t\t\tself.processNode(item);\n\t\t\taddAll(node.positions, item.positions);\n\n\t\t\t//TODO: paragraph gap\n\t\t});\n\t};\n\n\t// columns\n\tLayoutBuilder.prototype.processColumns = function(columnNode) {\n\t\tvar columns = columnNode.columns;\n\t\tvar availableWidth = this.writer.context().availableWidth;\n\t\tvar gaps = gapArray(columnNode._gap);\n\n\t\tif (gaps) availableWidth -= (gaps.length - 1) * columnNode._gap;\n\n\t\tColumnCalculator.buildColumnWidths(columns, availableWidth);\n\t\tvar result = this.processRow(columns, columns, gaps);\n\t addAll(columnNode.positions, result.positions);\n\n\n\t\tfunction gapArray(gap) {\n\t\t\tif (!gap) return null;\n\n\t\t\tvar gaps = [];\n\t\t\tgaps.push(0);\n\n\t\t\tfor(var i = columns.length - 1; i > 0; i--) {\n\t\t\t\tgaps.push(gap);\n\t\t\t}\n\n\t\t\treturn gaps;\n\t\t}\n\t};\n\n\tLayoutBuilder.prototype.processRow = function(columns, widths, gaps, tableBody, tableRow) {\n\t var self = this;\n\t var pageBreaks = [], positions = [];\n\n\t this.tracker.auto('pageChanged', storePageBreakData, function() {\n\t widths = widths || columns;\n\n\t self.writer.context().beginColumnGroup();\n\n\t for(var i = 0, l = columns.length; i < l; i++) {\n\t var column = columns[i];\n\t var width = widths[i]._calcWidth;\n\t var leftOffset = colLeftOffset(i);\n\n\t if (column.colSpan && column.colSpan > 1) {\n\t for(var j = 1; j < column.colSpan; j++) {\n\t width += widths[++i]._calcWidth + gaps[i];\n\t }\n\t }\n\n\t self.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));\n\t if (!column._span) {\n\t self.processNode(column);\n\t addAll(positions, column.positions);\n\t } else if (column._columnEndingContext) {\n\t // row-span ending\n\t self.writer.context().markEnding(column);\n\t }\n\t }\n\n\t self.writer.context().completeColumnGroup();\n\t });\n\n\t return {pageBreaks: pageBreaks, positions: positions};\n\n\t function storePageBreakData(data) {\n\t var pageDesc;\n\n\t for(var i = 0, l = pageBreaks.length; i < l; i++) {\n\t var desc = pageBreaks[i];\n\t if (desc.prevPage === data.prevPage) {\n\t pageDesc = desc;\n\t break;\n\t }\n\t }\n\n\t if (!pageDesc) {\n\t pageDesc = data;\n\t pageBreaks.push(pageDesc);\n\t }\n\t pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);\n\t pageDesc.y = Math.min(pageDesc.y, data.y);\n\t }\n\n\t\tfunction colLeftOffset(i) {\n\t\t\tif (gaps && gaps.length > i) return gaps[i];\n\t\t\treturn 0;\n\t\t}\n\n\t function getEndingCell(column, columnIndex) {\n\t if (column.rowSpan && column.rowSpan > 1) {\n\t var endingRow = tableRow + column.rowSpan - 1;\n\t if (endingRow >= tableBody.length) throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';\n\t return tableBody[endingRow][columnIndex];\n\t }\n\n\t return null;\n\t }\n\t};\n\n\t// lists\n\tLayoutBuilder.prototype.processList = function(orderedList, node) {\n\t\tvar self = this,\n\t items = orderedList ? node.ol : node.ul,\n\t gapSize = node._gapSize;\n\n\t\tthis.writer.context().addMargin(gapSize.width);\n\n\t\tvar nextMarker;\n\t\tthis.tracker.auto('lineAdded', addMarkerToFirstLeaf, function() {\n\t\t\titems.forEach(function(item) {\n\t\t\t\tnextMarker = item.listMarker;\n\t\t\t\tself.processNode(item);\n\t addAll(node.positions, item.positions);\n\t\t\t});\n\t\t});\n\n\t\tthis.writer.context().addMargin(-gapSize.width);\n\n\t\tfunction addMarkerToFirstLeaf(line) {\n\t\t\t// I'm not very happy with the way list processing is implemented\n\t\t\t// (both code and algorithm should be rethinked)\n\t\t\tif (nextMarker) {\n\t\t\t\tvar marker = nextMarker;\n\t\t\t\tnextMarker = null;\n\n\t\t\t\tif (marker.canvas) {\n\t\t\t\t\tvar vector = marker.canvas[0];\n\n\t\t\t\t\toffsetVector(vector, -marker._minWidth, 0);\n\t\t\t\t\tself.writer.addVector(vector);\n\t\t\t\t} else {\n\t\t\t\t\tvar markerLine = new Line(self.pageSize.width);\n\t\t\t\t\tmarkerLine.addInline(marker._inlines[0]);\n\t\t\t\t\tmarkerLine.x = -marker._minWidth;\n\t\t\t\t\tmarkerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();\n\t\t\t\t\tself.writer.addLine(markerLine, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// tables\n\tLayoutBuilder.prototype.processTable = function(tableNode) {\n\t var processor = new TableProcessor(tableNode);\n\n\t processor.beginTable(this.writer);\n\n\t for(var i = 0, l = tableNode.table.body.length; i < l; i++) {\n\t processor.beginRow(i, this.writer);\n\n\t var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i);\n\t addAll(tableNode.positions, result.positions);\n\n\t processor.endRow(i, this.writer, result.pageBreaks);\n\t }\n\n\t processor.endTable(this.writer);\n\t};\n\n\t// leafs (texts)\n\tLayoutBuilder.prototype.processLeaf = function(node) {\n\t\tvar line = this.buildNextLine(node);\n\n\t\twhile (line) {\n\t\t\tvar positions = this.writer.addLine(line);\n\t node.positions.push(positions);\n\t\t\tline = this.buildNextLine(node);\n\t\t}\n\t};\n\n\tLayoutBuilder.prototype.buildNextLine = function(textNode) {\n\t\tif (!textNode._inlines || textNode._inlines.length === 0) return null;\n\n\t\tvar line = new Line(this.writer.context().availableWidth);\n\n\t\twhile(textNode._inlines && textNode._inlines.length > 0 && line.hasEnoughSpaceForInline(textNode._inlines[0])) {\n\t\t\tline.addInline(textNode._inlines.shift());\n\t\t}\n\n\t\tline.lastLineInParagraph = textNode._inlines.length === 0;\n\t\treturn line;\n\t};\n\n\t// images\n\tLayoutBuilder.prototype.processImage = function(node) {\n\t var position = this.writer.addImage(node);\n\t node.positions.push(position);\n\t};\n\n\tLayoutBuilder.prototype.processCanvas = function(node) {\n\t\tvar height = node._minHeight;\n\n\t\tif (this.writer.context().availableHeight < height) {\n\t\t\t// TODO: support for canvas larger than a page\n\t\t\t// TODO: support for other overflow methods\n\n\t\t\tthis.writer.moveToNextPage();\n\t\t}\n\n\t\tnode.canvas.forEach(function(vector) {\n\t\t\tvar position = this.writer.addVector(vector);\n\t node.positions.push(position);\n\t\t}, this);\n\n\t\tthis.writer.context().moveDown(height);\n\t};\n\n\tLayoutBuilder.prototype.processQr = function(node) {\n\t\tvar position = this.writer.addQr(node);\n\t node.positions.push(position);\n\t};\n\n\tmodule.exports = LayoutBuilder;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = {\n\t\t'4A0': [4767.87, 6740.79],\n\t\t'2A0': [3370.39, 4767.87],\n\t\tA0: [2383.94, 3370.39],\n\t\tA1: [1683.78, 2383.94],\n\t\tA2: [1190.55, 1683.78],\n\t\tA3: [841.89, 1190.55],\n\t\tA4: [595.28, 841.89],\n\t\tA5: [419.53, 595.28],\n\t\tA6: [297.64, 419.53],\n\t\tA7: [209.76, 297.64],\n\t\tA8: [147.40, 209.76],\n\t\tA9: [104.88, 147.40],\n\t\tA10: [73.70, 104.88],\n\t\tB0: [2834.65, 4008.19],\n\t\tB1: [2004.09, 2834.65],\n\t\tB2: [1417.32, 2004.09],\n\t\tB3: [1000.63, 1417.32],\n\t\tB4: [708.66, 1000.63],\n\t\tB5: [498.90, 708.66],\n\t\tB6: [354.33, 498.90],\n\t\tB7: [249.45, 354.33],\n\t\tB8: [175.75, 249.45],\n\t\tB9: [124.72, 175.75],\n\t\tB10: [87.87, 124.72],\n\t\tC0: [2599.37, 3676.54],\n\t\tC1: [1836.85, 2599.37],\n\t\tC2: [1298.27, 1836.85],\n\t\tC3: [918.43, 1298.27],\n\t\tC4: [649.13, 918.43],\n\t\tC5: [459.21, 649.13],\n\t\tC6: [323.15, 459.21],\n\t\tC7: [229.61, 323.15],\n\t\tC8: [161.57, 229.61],\n\t\tC9: [113.39, 161.57],\n\t\tC10: [79.37, 113.39],\n\t\tRA0: [2437.80, 3458.27],\n\t\tRA1: [1729.13, 2437.80],\n\t\tRA2: [1218.90, 1729.13],\n\t\tRA3: [864.57, 1218.90],\n\t\tRA4: [609.45, 864.57],\n\t\tSRA0: [2551.18, 3628.35],\n\t\tSRA1: [1814.17, 2551.18],\n\t\tSRA2: [1275.59, 1814.17],\n\t\tSRA3: [907.09, 1275.59],\n\t\tSRA4: [637.80, 907.09],\n\t\tEXECUTIVE: [521.86, 756.00],\n\t\tFOLIO: [612.00, 936.00],\n\t\tLEGAL: [612.00, 1008.00],\n\t\tLETTER: [612.00, 792.00],\n\t\tTABLOID: [792.00, 1224.00]\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */\n\t'use strict';\n\n\tvar pdfKit = __webpack_require__(28);\n\tvar PDFImage = __webpack_require__(17);\n\n\tfunction ImageMeasure(pdfDoc, imageDictionary) {\n\t\tthis.pdfDoc = pdfDoc;\n\t\tthis.imageDictionary = imageDictionary || {};\n\t}\n\n\tImageMeasure.prototype.measureImage = function(src) {\n\t\tvar image, label;\n\t\tvar that = this;\n\n\t\tif (!this.pdfDoc._imageRegistry[src]) {\n\t\t\tlabel = 'I' + (++this.pdfDoc._imageCount);\n\t\t\timage = PDFImage.open(realImageSrc(src), label);\n\t\t\timage.embed(this.pdfDoc);\n\t\t\tthis.pdfDoc._imageRegistry[src] = image;\n\t\t} else {\n\t\t\timage = this.pdfDoc._imageRegistry[src];\n\t\t}\n\n\t\treturn { width: image.width, height: image.height };\n\n\t\tfunction realImageSrc(src) {\n\t\t\tvar img = that.imageDictionary[src];\n\n\t\t\tif (!img) return src;\n\n\t\t\tvar index = img.indexOf('base64,');\n\t\t\tif (index < 0) {\n\t\t\t\tthrow 'invalid image format, images dictionary should contain dataURL entries';\n\t\t\t}\n\n\t\t\treturn new Buffer(img.substring(index + 7), 'base64');\n\t\t}\n\t};\n\n\tmodule.exports = ImageMeasure;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4).Buffer))\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* jslint node: true */\n\t'use strict';\n\n\n\tfunction groupDecorations(line) {\n\t\tvar groups = [], curGroup = null;\n\t\tfor(var i = 0, l = line.inlines.length; i < l; i++) {\n\t\t\tvar inline = line.inlines[i];\n\t\t\tvar decoration = inline.decoration;\n\t\t\tif(!decoration) {\n\t\t\t\tcurGroup = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar color = inline.decorationColor || inline.color || 'black';\n\t\t\tvar style = inline.decorationStyle || 'solid';\n\t\t\tdecoration = Array.isArray(decoration) ? decoration : [ decoration ];\n\t\t\tfor(var ii = 0, ll = decoration.length; ii < ll; ii++) {\n\t\t\t\tvar deco = decoration[ii];\n\t\t\t\tif(!curGroup || deco !== curGroup.decoration ||\n\t\t\t\t\t\tstyle !== curGroup.decorationStyle || color !== curGroup.decorationColor ||\n\t\t\t\t\t\tdeco === 'lineThrough') {\n\n\t\t\t\t\tcurGroup = {\n\t\t\t\t\t\tline: line,\n\t\t\t\t\t\tdecoration: deco,\n\t\t\t\t\t\tdecorationColor: color,\n\t\t\t\t\t\tdecorationStyle: style,\n\t\t\t\t\t\tinlines: [ inline ]\n\t\t\t\t\t};\n\t\t\t\t\tgroups.push(curGroup);\n\t\t\t\t} else {\n\t\t\t\t\tcurGroup.inlines.push(inline);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn groups;\n\t}\n\n\tfunction drawDecoration(group, x, y, pdfKitDoc) {\n\t\tfunction maxInline() {\n\t\t\tvar max = 0;\n\t\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\n\t\t\t\tvar inl = group.inlines[i];\n\t\t\t\tmax = inl.fontSize > max ? i : max;\n\t\t\t}\n\t\t\treturn group.inlines[max];\n\t\t}\n\t\tfunction width() {\n\t\t\tvar sum = 0;\n\t\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\n\t\t\t\tsum += group.inlines[i].width;\n\t\t\t}\n\t\t\treturn sum;\n\t\t}\n\t\tvar firstInline = group.inlines[0],\n\t\t\tbiggerInline = maxInline(),\n\t\t\ttotalWidth = width(),\n\t\t\tlineAscent = group.line.getAscenderHeight(),\n\t\t\tascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,\n\t\t\theight = biggerInline.height,\n\t\t\tdescent = height - ascent;\n\n\t\tvar lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;\n\n\t\tswitch (group.decoration) {\n\t\t\tcase 'underline':\n\t\t\t\ty += lineAscent + descent * 0.45;\n\t\t\t\tbreak;\n\t\t\tcase 'overline':\n\t\t\t\ty += lineAscent - (ascent * 0.85);\n\t\t\t\tbreak;\n\t\t\tcase 'lineThrough':\n\t\t\t\ty += lineAscent - (ascent * 0.25);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow 'Unkown decoration : ' + group.decoration;\n\t\t}\n\t\tpdfKitDoc.save();\n\n\t\tif(group.decorationStyle === 'double') {\n\t\t\tvar gap = Math.max(0.5, lw*2);\n\t\t\tpdfKitDoc\t.fillColor(group.decorationColor)\n\t\t\t\t\t\t.rect(x + firstInline.x, y-lw/2, totalWidth, lw/2).fill()\n\t\t\t\t\t\t.rect(x + firstInline.x, y+gap-lw/2, totalWidth, lw/2).fill();\n\t\t} else if(group.decorationStyle === 'dashed') {\n\t\t\tvar nbDashes = Math.ceil(totalWidth / (3.96+2.84));\n\t\t\tvar rdx = x + firstInline.x;\n\t\t\tpdfKitDoc.rect(rdx, y, totalWidth, lw).clip();\n\t\t\tpdfKitDoc.fillColor(group.decorationColor);\n\t\t\tfor (var i = 0; i < nbDashes; i++) {\n\t\t\t\tpdfKitDoc.rect(rdx, y-lw/2, 3.96, lw).fill();\n\t\t\t\trdx += 3.96 + 2.84;\n\t\t\t}\n\t\t} else if(group.decorationStyle === 'dotted') {\n\t\t\tvar nbDots = Math.ceil(totalWidth / (lw*3));\n\t\t\tvar rx = x + firstInline.x;\n\t\t\tpdfKitDoc.rect(rx, y, totalWidth, lw).clip();\n\t\t\tpdfKitDoc.fillColor(group.decorationColor);\n\t\t\tfor (var ii = 0; ii < nbDots; ii++) {\n\t\t\t\tpdfKitDoc.rect(rx, y-lw/2, lw, lw).fill();\n\t\t\t\trx += (lw*3);\n\t\t\t}\n\t\t} else if(group.decorationStyle === 'wavy') {\n\t\t\tvar sh = 0.7, sv = 1;\n\t\t\tvar nbWaves = Math.ceil(totalWidth / (sh*2))+1;\n\t\t\tvar rwx = x + firstInline.x - 1;\n\t\t\tpdfKitDoc.rect(x + firstInline.x, y-sv, totalWidth, y+sv).clip();\n\t\t\tpdfKitDoc.lineWidth(0.24);\n\t\t\tpdfKitDoc.moveTo(rwx, y);\n\t\t\tfor(var iii = 0; iii < nbWaves; iii++) {\n\t\t\t\tpdfKitDoc .bezierCurveTo(rwx+sh, y-sv, rwx+sh*2, y-sv, rwx+sh*3, y)\n\t\t\t\t\t\t\t.bezierCurveTo(rwx+sh*4, y+sv, rwx+sh*5, y+sv, rwx+sh*6, y);\n\t\t\t\t\trwx += sh*6;\n\t\t\t\t}\n\t\t\tpdfKitDoc.stroke(group.decorationColor);\n\n\t\t} else {\n\t\t\tpdfKitDoc\t.fillColor(group.decorationColor)\n\t\t\t\t\t\t.rect(x + firstInline.x, y-lw/2, totalWidth, lw)\n\t\t\t\t\t\t.fill();\n\t\t}\n\t\tpdfKitDoc.restore();\n\t}\n\n\tfunction drawDecorations(line, x, y, pdfKitDoc) {\n\t\tvar groups = groupDecorations(line);\n\t\tfor (var i = 0, l = groups.length; i < l; i++) {\n\t\t\tdrawDecoration(groups[i], x, y, pdfKitDoc);\n\t\t}\n\t}\n\n\tfunction drawBackground(line, x, y, pdfKitDoc) {\n\t\tvar height = line.getHeight();\n\t\tfor(var i = 0, l = line.inlines.length; i < l; i++) {\n\t\t\tvar inline = line.inlines[i];\n\t\t\t\tif(inline.background) {\n\t\t\t\t\tpdfKitDoc\t.fillColor(inline.background)\n\t\t\t\t\t\t\t\t.rect(x + inline.x, y, inline.width, height)\n\t\t\t\t\t\t\t\t.fill();\n\t\t\t\t}\n\t\t}\n\t}\n\n\tmodule.exports = {\n\t\tdrawBackground: drawBackground,\n\t\tdrawDecorations: drawDecorations\n\t};\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {/* jslint node: true */\n\t'use strict';\n\n\t// var b64 = require('./base64.js').base64DecToArr;\n\tfunction VirtualFileSystem() {\n\t\tthis.fileSystem = {};\n\t\tthis.baseSystem = {};\n\t}\n\n\tVirtualFileSystem.prototype.readFileSync = function(filename) {\n\t\tfilename = fixFilename(filename);\n\n\t\tvar base64content = this.baseSystem[filename];\n\t\tif (base64content) {\n\t\t\treturn new Buffer(base64content, 'base64');\n\t\t}\n\n\t\treturn this.fileSystem[filename];\n\t};\n\n\tVirtualFileSystem.prototype.writeFileSync = function(filename, content) {\n\t\tthis.fileSystem[fixFilename(filename)] = content;\n\t};\n\n\tVirtualFileSystem.prototype.bindFS = function(data) {\n\t\tthis.baseSystem = data;\n\t};\n\n\n\tfunction fixFilename(filename) {\n\t\tif (filename.indexOf(__dirname) === 0) {\n\t\t\tfilename = filename.substring(__dirname.length);\n\t\t}\n\n\t\tif (filename.indexOf('/') === 0) {\n\t\t\tfilename = filename.substring(1);\n\t\t}\n\n\t\treturn filename;\n\t}\n\n\tmodule.exports = new VirtualFileSystem();\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4).Buffer, \"/\"))\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**\n\t * @license\n\t * lodash 3.1.0 (Custom Build) \n\t * Build: `lodash modern -d -o ./index.js`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.7.0 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t;(function() {\n\n\t /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n\t var undefined;\n\n\t /** Used as the semantic version number. */\n\t var VERSION = '3.1.0';\n\n\t /** Used to compose bitmasks for wrapper metadata. */\n\t var BIND_FLAG = 1,\n\t BIND_KEY_FLAG = 2,\n\t CURRY_BOUND_FLAG = 4,\n\t CURRY_FLAG = 8,\n\t CURRY_RIGHT_FLAG = 16,\n\t PARTIAL_FLAG = 32,\n\t PARTIAL_RIGHT_FLAG = 64,\n\t REARG_FLAG = 128,\n\t ARY_FLAG = 256;\n\n\t /** Used as default options for `_.trunc`. */\n\t var DEFAULT_TRUNC_LENGTH = 30,\n\t DEFAULT_TRUNC_OMISSION = '...';\n\n\t /** Used to detect when a function becomes hot. */\n\t var HOT_COUNT = 150,\n\t HOT_SPAN = 16;\n\n\t /** Used to indicate the type of lazy iteratees. */\n\t var LAZY_FILTER_FLAG = 0,\n\t LAZY_MAP_FLAG = 1,\n\t LAZY_WHILE_FLAG = 2;\n\n\t /** Used as the `TypeError` message for \"Functions\" methods. */\n\t var FUNC_ERROR_TEXT = 'Expected a function';\n\n\t /** Used as the internal argument placeholder. */\n\t var PLACEHOLDER = '__lodash_placeholder__';\n\n\t /** `Object#toString` result references. */\n\t var argsTag = '[object Arguments]',\n\t arrayTag = '[object Array]',\n\t boolTag = '[object Boolean]',\n\t dateTag = '[object Date]',\n\t errorTag = '[object Error]',\n\t funcTag = '[object Function]',\n\t mapTag = '[object Map]',\n\t numberTag = '[object Number]',\n\t objectTag = '[object Object]',\n\t regexpTag = '[object RegExp]',\n\t setTag = '[object Set]',\n\t stringTag = '[object String]',\n\t weakMapTag = '[object WeakMap]';\n\n\t var arrayBufferTag = '[object ArrayBuffer]',\n\t float32Tag = '[object Float32Array]',\n\t float64Tag = '[object Float64Array]',\n\t int8Tag = '[object Int8Array]',\n\t int16Tag = '[object Int16Array]',\n\t int32Tag = '[object Int32Array]',\n\t uint8Tag = '[object Uint8Array]',\n\t uint8ClampedTag = '[object Uint8ClampedArray]',\n\t uint16Tag = '[object Uint16Array]',\n\t uint32Tag = '[object Uint32Array]';\n\n\t /** Used to match empty string literals in compiled template source. */\n\t var reEmptyStringLeading = /\\b__p \\+= '';/g,\n\t reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n\t reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n\t /** Used to match HTML entities and HTML characters. */\n\t var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\n\t reUnescapedHtml = /[&<>\"'`]/g,\n\t reHasEscapedHtml = RegExp(reEscapedHtml.source),\n\t reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n\t /** Used to match template delimiters. */\n\t var reEscape = /<%-([\\s\\S]+?)%>/g,\n\t reEvaluate = /<%([\\s\\S]+?)%>/g,\n\t reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n\t /**\n\t * Used to match ES template delimiters.\n\t * See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components)\n\t * for more details.\n\t */\n\t var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n\t /** Used to match `RegExp` flags from their coerced string values. */\n\t var reFlags = /\\w*$/;\n\n\t /** Used to detect named functions. */\n\t var reFuncName = /^\\s*function[ \\n\\r\\t]+\\w/;\n\n\t /** Used to detect hexadecimal string values. */\n\t var reHexPrefix = /^0[xX]/;\n\n\t /** Used to detect host constructors (Safari > 5). */\n\t var reHostCtor = /^\\[object .+?Constructor\\]$/;\n\n\t /** Used to match latin-1 supplementary letters (excluding mathematical operators). */\n\t var reLatin1 = /[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g;\n\n\t /** Used to ensure capturing order of template delimiters. */\n\t var reNoMatch = /($^)/;\n\n\t /**\n\t * Used to match `RegExp` special characters.\n\t * See this [article on `RegExp` characters](http://www.regular-expressions.info/characters.html#special)\n\t * for more details.\n\t */\n\t var reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n\t reHasRegExpChars = RegExp(reRegExpChars.source);\n\n\t /** Used to detect functions containing a `this` reference. */\n\t var reThis = /\\bthis\\b/;\n\n\t /** Used to match unescaped characters in compiled string literals. */\n\t var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n\t /** Used to match words to create compound words. */\n\t var reWords = (function() {\n\t var upper = '[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]',\n\t lower = '[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+';\n\n\t return RegExp(upper + '{2,}(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\n\t }());\n\n\t /** Used to detect and test for whitespace. */\n\t var whitespace = (\n\t // Basic whitespace characters.\n\t ' \\t\\x0b\\f\\xa0\\ufeff' +\n\n\t // Line terminators.\n\t '\\n\\r\\u2028\\u2029' +\n\n\t // Unicode category \"Zs\" space separators.\n\t '\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'\n\t );\n\n\t /** Used to assign default `context` object properties. */\n\t var contextProps = [\n\t 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\n\t 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\n\t 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'document',\n\t 'isFinite', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\n\t 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n\t 'window', 'WinRTError'\n\t ];\n\n\t /** Used to make template sourceURLs easier to identify. */\n\t var templateCounter = -1;\n\n\t /** Used to identify `toStringTag` values of typed arrays. */\n\t var typedArrayTags = {};\n\t typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n\t typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n\t typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n\t typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n\t typedArrayTags[uint32Tag] = true;\n\t typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n\t typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n\t typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n\t typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n\t typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n\t typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n\t typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n\t /** Used to identify `toStringTag` values supported by `_.clone`. */\n\t var cloneableTags = {};\n\t cloneableTags[argsTag] = cloneableTags[arrayTag] =\n\t cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n\t cloneableTags[dateTag] = cloneableTags[float32Tag] =\n\t cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n\t cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n\t cloneableTags[numberTag] = cloneableTags[objectTag] =\n\t cloneableTags[regexpTag] = cloneableTags[stringTag] =\n\t cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n\t cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n\t cloneableTags[errorTag] = cloneableTags[funcTag] =\n\t cloneableTags[mapTag] = cloneableTags[setTag] =\n\t cloneableTags[weakMapTag] = false;\n\n\t /** Used as an internal `_.debounce` options object by `_.throttle`. */\n\t var debounceOptions = {\n\t 'leading': false,\n\t 'maxWait': 0,\n\t 'trailing': false\n\t };\n\n\t /** Used to map latin-1 supplementary letters to basic latin letters. */\n\t var deburredLetters = {\n\t '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n\t '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n\t '\\xc7': 'C', '\\xe7': 'c',\n\t '\\xd0': 'D', '\\xf0': 'd',\n\t '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n\t '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n\t '\\xcC': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n\t '\\xeC': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n\t '\\xd1': 'N', '\\xf1': 'n',\n\t '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n\t '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n\t '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n\t '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n\t '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n\t '\\xc6': 'Ae', '\\xe6': 'ae',\n\t '\\xde': 'Th', '\\xfe': 'th',\n\t '\\xdf': 'ss'\n\t };\n\n\t /** Used to map characters to HTML entities. */\n\t var htmlEscapes = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`'\n\t };\n\n\t /** Used to map HTML entities to characters. */\n\t var htmlUnescapes = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '"': '\"',\n\t ''': \"'\",\n\t '`': '`'\n\t };\n\n\t /** Used to determine if values are of the language type `Object`. */\n\t var objectTypes = {\n\t 'function': true,\n\t 'object': true\n\t };\n\n\t /** Used to escape characters for inclusion in compiled string literals. */\n\t var stringEscapes = {\n\t '\\\\': '\\\\',\n\t \"'\": \"'\",\n\t '\\n': 'n',\n\t '\\r': 'r',\n\t '\\u2028': 'u2028',\n\t '\\u2029': 'u2029'\n\t };\n\n\t /**\n\t * Used as a reference to the global object.\n\t *\n\t * The `this` value is used if it is the global object to avoid Greasemonkey's\n\t * restricted `window` object, otherwise the `window` object is used.\n\t */\n\t var root = (objectTypes[typeof window] && window !== (this && this.window)) ? window : this;\n\n\t /** Detect free variable `exports`. */\n\t var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n\t /** Detect free variable `module`. */\n\t var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n\t /** Detect free variable `global` from Node.js or Browserified code and use it as `root`. */\n\t var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;\n\t if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\n\t root = freeGlobal;\n\t }\n\n\t /** Detect the popular CommonJS extension `module.exports`. */\n\t var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n\t /*--------------------------------------------------------------------------*/\n\n\t /**\n\t * The base implementation of `compareAscending` which compares values and\n\t * sorts them in ascending order without guaranteeing a stable sort.\n\t *\n\t * @private\n\t * @param {*} value The value to compare to `other`.\n\t * @param {*} other The value to compare to `value`.\n\t * @returns {number} Returns the sort order indicator for `value`.\n\t */\n\t function baseCompareAscending(value, other) {\n\t if (value !== other) {\n\t var valIsReflexive = value === value,\n\t othIsReflexive = other === other;\n\n\t if (value > other || !valIsReflexive || (typeof value == 'undefined' && othIsReflexive)) {\n\t return 1;\n\t }\n\t if (value < other || !othIsReflexive || (typeof other == 'undefined' && valIsReflexive)) {\n\t return -1;\n\t }\n\t }\n\t return 0;\n\t }\n\n\t /**\n\t * The base implementation of `_.indexOf` without support for binary searches.\n\t *\n\t * @private\n\t * @param {Array} array The array to search.\n\t * @param {*} value The value to search for.\n\t * @param {number} [fromIndex=0] The index to search from.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\t function baseIndexOf(array, value, fromIndex) {\n\t if (value !== value) {\n\t return indexOfNaN(array, fromIndex);\n\t }\n\t var index = (fromIndex || 0) - 1,\n\t length = array.length;\n\n\t while (++index < length) {\n\t if (array[index] === value) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t }\n\n\t /**\n\t * The base implementation of `_.sortBy` and `_.sortByAll` which uses `comparer`\n\t * to define the sort order of `array` and replaces criteria objects with their\n\t * corresponding values.\n\t *\n\t * @private\n\t * @param {Array} array The array to sort.\n\t * @param {Function} comparer The function to define sort order.\n\t * @returns {Array} Returns `array`.\n\t */\n\t function baseSortBy(array, comparer) {\n\t var length = array.length;\n\n\t array.sort(comparer);\n\t while (length--) {\n\t array[length] = array[length].value;\n\t }\n\t return array;\n\t }\n\n\t /**\n\t * Converts `value` to a string if it is not one. An empty string is returned\n\t * for `null` or `undefined` values.\n\t *\n\t * @private\n\t * @param {*} value The value to process.\n\t * @returns {string} Returns the string.\n\t */\n\t function baseToString(value) {\n\t if (typeof value == 'string') {\n\t return value;\n\t }\n\t return value == null ? '' : (value + '');\n\t }\n\n\t /**\n\t * Used by `_.max` and `_.min` as the default callback for string values.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @returns {number} Returns the code unit of the first character of the string.\n\t */\n\t function charAtCallback(string) {\n\t return string.charCodeAt(0);\n\t }\n\n\t /**\n\t * Used by `_.trim` and `_.trimLeft` to get the index of the first character\n\t * of `string` that is not found in `chars`.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @param {string} chars The characters to find.\n\t * @returns {number} Returns the index of the first character not found in `chars`.\n\t */\n\t function charsLeftIndex(string, chars) {\n\t var index = -1,\n\t length = string.length;\n\n\t while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\n\t return index;\n\t }\n\n\t /**\n\t * Used by `_.trim` and `_.trimRight` to get the index of the last character\n\t * of `string` that is not found in `chars`.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @param {string} chars The characters to find.\n\t * @returns {number} Returns the index of the last character not found in `chars`.\n\t */\n\t function charsRightIndex(string, chars) {\n\t var index = string.length;\n\n\t while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\n\t return index;\n\t }\n\n\t /**\n\t * Used by `_.sortBy` to compare transformed elements of a collection and stable\n\t * sort them in ascending order.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare to `other`.\n\t * @param {Object} other The object to compare to `object`.\n\t * @returns {number} Returns the sort order indicator for `object`.\n\t */\n\t function compareAscending(object, other) {\n\t return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\n\t }\n\n\t /**\n\t * Used by `_.sortByAll` to compare multiple properties of each element\n\t * in a collection and stable sort them in ascending order.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare to `other`.\n\t * @param {Object} other The object to compare to `object`.\n\t * @returns {number} Returns the sort order indicator for `object`.\n\t */\n\t function compareMultipleAscending(object, other) {\n\t var index = -1,\n\t objCriteria = object.criteria,\n\t othCriteria = other.criteria,\n\t length = objCriteria.length;\n\n\t while (++index < length) {\n\t var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\n\t if (result) {\n\t return result;\n\t }\n\t }\n\t // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n\t // that causes it, under certain circumstances, to provide the same value for\n\t // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n\t // for more details.\n\t //\n\t // This also ensures a stable sort in V8 and other engines.\n\t // See https://code.google.com/p/v8/issues/detail?id=90 for more details.\n\t return object.index - other.index;\n\t }\n\n\t /**\n\t * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.\n\t *\n\t * @private\n\t * @param {string} letter The matched letter to deburr.\n\t * @returns {string} Returns the deburred letter.\n\t */\n\t function deburrLetter(letter) {\n\t return deburredLetters[letter];\n\t }\n\n\t /**\n\t * Used by `_.escape` to convert characters to HTML entities.\n\t *\n\t * @private\n\t * @param {string} chr The matched character to escape.\n\t * @returns {string} Returns the escaped character.\n\t */\n\t function escapeHtmlChar(chr) {\n\t return htmlEscapes[chr];\n\t }\n\n\t /**\n\t * Used by `_.template` to escape characters for inclusion in compiled\n\t * string literals.\n\t *\n\t * @private\n\t * @param {string} chr The matched character to escape.\n\t * @returns {string} Returns the escaped character.\n\t */\n\t function escapeStringChar(chr) {\n\t return '\\\\' + stringEscapes[chr];\n\t }\n\n\t /**\n\t * Gets the index at which the first occurrence of `NaN` is found in `array`.\n\t * If `fromRight` is provided elements of `array` are iterated from right to left.\n\t *\n\t * @private\n\t * @param {Array} array The array to search.\n\t * @param {number} [fromIndex] The index to search from.\n\t * @param {boolean} [fromRight] Specify iterating from right to left.\n\t * @returns {number} Returns the index of the matched `NaN`, else `-1`.\n\t */\n\t function indexOfNaN(array, fromIndex, fromRight) {\n\t var length = array.length,\n\t index = fromRight ? (fromIndex || length) : ((fromIndex || 0) - 1);\n\n\t while ((fromRight ? index-- : ++index < length)) {\n\t var other = array[index];\n\t if (other !== other) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t }\n\n\t /**\n\t * Checks if `value` is object-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t */\n\t function isObjectLike(value) {\n\t return (value && typeof value == 'object') || false;\n\t }\n\n\t /**\n\t * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a\n\t * character code is whitespace.\n\t *\n\t * @private\n\t * @param {number} charCode The character code to inspect.\n\t * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.\n\t */\n\t function isSpace(charCode) {\n\t return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\n\t (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\n\t }\n\n\t /**\n\t * Replaces all `placeholder` elements in `array` with an internal placeholder\n\t * and returns an array of their indexes.\n\t *\n\t * @private\n\t * @param {Array} array The array to modify.\n\t * @param {*} placeholder The placeholder to replace.\n\t * @returns {Array} Returns the new array of placeholder indexes.\n\t */\n\t function replaceHolders(array, placeholder) {\n\t var index = -1,\n\t length = array.length,\n\t resIndex = -1,\n\t result = [];\n\n\t while (++index < length) {\n\t if (array[index] === placeholder) {\n\t array[index] = PLACEHOLDER;\n\t result[++resIndex] = index;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * An implementation of `_.uniq` optimized for sorted arrays without support\n\t * for callback shorthands and `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {Function} [iteratee] The function invoked per iteration.\n\t * @returns {Array} Returns the new duplicate-value-free array.\n\t */\n\t function sortedUniq(array, iteratee) {\n\t var seen,\n\t index = -1,\n\t length = array.length,\n\t resIndex = -1,\n\t result = [];\n\n\t while (++index < length) {\n\t var value = array[index],\n\t computed = iteratee ? iteratee(value, index, array) : value;\n\n\t if (!index || seen !== computed) {\n\t seen = computed;\n\t result[++resIndex] = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace\n\t * character of `string`.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @returns {number} Returns the index of the first non-whitespace character.\n\t */\n\t function trimmedLeftIndex(string) {\n\t var index = -1,\n\t length = string.length;\n\n\t while (++index < length && isSpace(string.charCodeAt(index))) {}\n\t return index;\n\t }\n\n\t /**\n\t * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace\n\t * character of `string`.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @returns {number} Returns the index of the last non-whitespace character.\n\t */\n\t function trimmedRightIndex(string) {\n\t var index = string.length;\n\n\t while (index-- && isSpace(string.charCodeAt(index))) {}\n\t return index;\n\t }\n\n\t /**\n\t * Used by `_.unescape` to convert HTML entities to characters.\n\t *\n\t * @private\n\t * @param {string} chr The matched character to unescape.\n\t * @returns {string} Returns the unescaped character.\n\t */\n\t function unescapeHtmlChar(chr) {\n\t return htmlUnescapes[chr];\n\t }\n\n\t /*--------------------------------------------------------------------------*/\n\n\t /**\n\t * Create a new pristine `lodash` function using the given `context` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Utility\n\t * @param {Object} [context=root] The context object.\n\t * @returns {Function} Returns a new `lodash` function.\n\t * @example\n\t *\n\t * _.mixin({ 'add': function(a, b) { return a + b; } });\n\t *\n\t * var lodash = _.runInContext();\n\t * lodash.mixin({ 'sub': function(a, b) { return a - b; } });\n\t *\n\t * _.isFunction(_.add);\n\t * // => true\n\t * _.isFunction(_.sub);\n\t * // => false\n\t *\n\t * lodash.isFunction(lodash.add);\n\t * // => false\n\t * lodash.isFunction(lodash.sub);\n\t * // => true\n\t *\n\t * // using `context` to mock `Date#getTime` use in `_.now`\n\t * var mock = _.runInContext({\n\t * 'Date': function() {\n\t * return { 'getTime': getTimeMock };\n\t * }\n\t * });\n\t *\n\t * // or creating a suped-up `defer` in Node.js\n\t * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n\t */\n\t function runInContext(context) {\n\t // Avoid issues with some ES3 environments that attempt to use values, named\n\t // after built-in constructors like `Object`, for the creation of literals.\n\t // ES5 clears this up by stating that literals must use built-in constructors.\n\t // See https://es5.github.io/#x11.1.5 for more details.\n\t context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n\n\t /** Native constructor references. */\n\t var Array = context.Array,\n\t Date = context.Date,\n\t Error = context.Error,\n\t Function = context.Function,\n\t Math = context.Math,\n\t Number = context.Number,\n\t Object = context.Object,\n\t RegExp = context.RegExp,\n\t String = context.String,\n\t TypeError = context.TypeError;\n\n\t /** Used for native method references. */\n\t var arrayProto = Array.prototype,\n\t objectProto = Object.prototype;\n\n\t /** Used to detect DOM support. */\n\t var document = (document = context.window) && document.document;\n\n\t /** Used to resolve the decompiled source of functions. */\n\t var fnToString = Function.prototype.toString;\n\n\t /** Used to the length of n-tuples for `_.unzip`. */\n\t var getLength = baseProperty('length');\n\n\t /** Used to check objects for own properties. */\n\t var hasOwnProperty = objectProto.hasOwnProperty;\n\n\t /** Used to generate unique IDs. */\n\t var idCounter = 0;\n\n\t /**\n\t * Used to resolve the `toStringTag` of values.\n\t * See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n\t * for more details.\n\t */\n\t var objToString = objectProto.toString;\n\n\t /** Used to restore the original `_` reference in `_.noConflict`. */\n\t var oldDash = context._;\n\n\t /** Used to detect if a method is native. */\n\t var reNative = RegExp('^' +\n\t escapeRegExp(objToString)\n\t .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t );\n\n\t /** Native method references. */\n\t var ArrayBuffer = isNative(ArrayBuffer = context.ArrayBuffer) && ArrayBuffer,\n\t bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice,\n\t ceil = Math.ceil,\n\t clearTimeout = context.clearTimeout,\n\t floor = Math.floor,\n\t getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n\t push = arrayProto.push,\n\t propertyIsEnumerable = objectProto.propertyIsEnumerable,\n\t Set = isNative(Set = context.Set) && Set,\n\t setTimeout = context.setTimeout,\n\t splice = arrayProto.splice,\n\t Uint8Array = isNative(Uint8Array = context.Uint8Array) && Uint8Array,\n\t unshift = arrayProto.unshift,\n\t WeakMap = isNative(WeakMap = context.WeakMap) && WeakMap;\n\n\t /** Used to clone array buffers. */\n\t var Float64Array = (function() {\n\t // Safari 5 errors when using an array buffer to initialize a typed array\n\t // where the array buffer's `byteLength` is not a multiple of the typed\n\t // array's `BYTES_PER_ELEMENT`.\n\t try {\n\t var func = isNative(func = context.Float64Array) && func,\n\t result = new func(new ArrayBuffer(10), 0, 1) && func;\n\t } catch(e) {}\n\t return result;\n\t }());\n\n\t /* Native method references for those with the same name as other `lodash` methods. */\n\t var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n\t nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,\n\t nativeIsFinite = context.isFinite,\n\t nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n\t nativeMax = Math.max,\n\t nativeMin = Math.min,\n\t nativeNow = isNative(nativeNow = Date.now) && nativeNow,\n\t nativeNumIsFinite = isNative(nativeNumIsFinite = Number.isFinite) && nativeNumIsFinite,\n\t nativeParseInt = context.parseInt,\n\t nativeRandom = Math.random;\n\n\t /** Used as references for `-Infinity` and `Infinity`. */\n\t var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\n\t POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\n\n\t /** Used as references for the maximum length and index of an array. */\n\t var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1,\n\t MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n\t HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n\t /** Used as the size, in bytes, of each `Float64Array` element. */\n\t var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;\n\n\t /**\n\t * Used as the maximum length of an array-like value.\n\t * See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n\t * for more details.\n\t */\n\t var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n\t /** Used to store function metadata. */\n\t var metaMap = WeakMap && new WeakMap;\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates a `lodash` object which wraps `value` to enable intuitive chaining.\n\t * Methods that operate on and return arrays, collections, and functions can\n\t * be chained together. Methods that return a boolean or single value will\n\t * automatically end the chain returning the unwrapped value. Explicit chaining\n\t * may be enabled using `_.chain`. The execution of chained methods is lazy,\n\t * that is, execution is deferred until `_#value` is implicitly or explicitly\n\t * called.\n\t *\n\t * Lazy evaluation allows several methods to support shortcut fusion. Shortcut\n\t * fusion is an optimization that merges iteratees to avoid creating intermediate\n\t * arrays and reduce the number of iteratee executions.\n\t *\n\t * Chaining is supported in custom builds as long as the `_#value` method is\n\t * directly or indirectly included in the build.\n\t *\n\t * In addition to lodash methods, wrappers also have the following `Array` methods:\n\t * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,\n\t * and `unshift`\n\t *\n\t * The wrapper functions that support shortcut fusion are:\n\t * `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, `first`,\n\t * `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, `slice`,\n\t * `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `where`\n\t *\n\t * The chainable wrapper functions are:\n\t * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,\n\t * `callback`, `chain`, `chunk`, `compact`, `concat`, `constant`, `countBy`,\n\t * `create`, `curry`, `debounce`, `defaults`, `defer`, `delay`, `difference`,\n\t * `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, `flatten`,\n\t * `flattenDeep`, `flow`, `flowRight`, `forEach`, `forEachRight`, `forIn`,\n\t * `forInRight`, `forOwn`, `forOwnRight`, `functions`, `groupBy`, `indexBy`,\n\t * `initial`, `intersection`, `invert`, `invoke`, `keys`, `keysIn`, `map`,\n\t * `mapValues`, `matches`, `memoize`, `merge`, `mixin`, `negate`, `noop`,\n\t * `omit`, `once`, `pairs`, `partial`, `partialRight`, `partition`, `pick`,\n\t * `pluck`, `property`, `propertyOf`, `pull`, `pullAt`, `push`, `range`,\n\t * `rearg`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,\n\t * `sortBy`, `sortByAll`, `splice`, `take`, `takeRight`, `takeRightWhile`,\n\t * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,\n\t * `transform`, `union`, `uniq`, `unshift`, `unzip`, `values`, `valuesIn`,\n\t * `where`, `without`, `wrap`, `xor`, `zip`, and `zipObject`\n\t *\n\t * The wrapper functions that are **not** chainable by default are:\n\t * `attempt`, `camelCase`, `capitalize`, `clone`, `cloneDeep`, `deburr`,\n\t * `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`,\n\t * `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, `has`,\n\t * `identity`, `includes`, `indexOf`, `isArguments`, `isArray`, `isBoolean`,\n\t * `isDate`, `isElement`, `isEmpty`, `isEqual`, `isError`, `isFinite`,\n\t * `isFunction`, `isMatch`, `isNative`, `isNaN`, `isNull`, `isNumber`,\n\t * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`,\n\t * `isTypedArray`, `join`, `kebabCase`, `last`, `lastIndexOf`, `max`, `min`,\n\t * `noConflict`, `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`,\n\t * `random`, `reduce`, `reduceRight`, `repeat`, `result`, `runInContext`,\n\t * `shift`, `size`, `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`,\n\t * `startCase`, `startsWith`, `template`, `trim`, `trimLeft`, `trimRight`,\n\t * `trunc`, `unescape`, `uniqueId`, `value`, and `words`\n\t *\n\t * The wrapper function `sample` will return a wrapped value when `n` is provided,\n\t * otherwise an unwrapped value is returned.\n\t *\n\t * @name _\n\t * @constructor\n\t * @category Chain\n\t * @param {*} value The value to wrap in a `lodash` instance.\n\t * @returns {Object} Returns a `lodash` instance.\n\t * @example\n\t *\n\t * var wrapped = _([1, 2, 3]);\n\t *\n\t * // returns an unwrapped value\n\t * wrapped.reduce(function(sum, n) { return sum + n; });\n\t * // => 6\n\t *\n\t * // returns a wrapped value\n\t * var squares = wrapped.map(function(n) { return n * n; });\n\t *\n\t * _.isArray(squares);\n\t * // => false\n\t *\n\t * _.isArray(squares.value());\n\t * // => true\n\t */\n\t function lodash(value) {\n\t if (isObjectLike(value) && !isArray(value)) {\n\t if (value instanceof LodashWrapper) {\n\t return value;\n\t }\n\t if (hasOwnProperty.call(value, '__wrapped__')) {\n\t return new LodashWrapper(value.__wrapped__, value.__chain__, arrayCopy(value.__actions__));\n\t }\n\t }\n\t return new LodashWrapper(value);\n\t }\n\n\t /**\n\t * The base constructor for creating `lodash` wrapper objects.\n\t *\n\t * @private\n\t * @param {*} value The value to wrap.\n\t * @param {boolean} [chainAll] Enable chaining for all wrapper methods.\n\t * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.\n\t */\n\t function LodashWrapper(value, chainAll, actions) {\n\t this.__actions__ = actions || [];\n\t this.__chain__ = !!chainAll;\n\t this.__wrapped__ = value;\n\t }\n\n\t /**\n\t * An object environment feature flags.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Object\n\t */\n\t var support = lodash.support = {};\n\n\t (function(x) {\n\n\t /**\n\t * Detect if functions can be decompiled by `Function#toString`\n\t * (all but Firefox OS certified apps, older Opera mobile browsers, and\n\t * the PlayStation 3; forced `false` for Windows 8 apps).\n\t *\n\t * @memberOf _.support\n\t * @type boolean\n\t */\n\t support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);\n\n\t /**\n\t * Detect if `Function#name` is supported (all but IE).\n\t *\n\t * @memberOf _.support\n\t * @type boolean\n\t */\n\t support.funcNames = typeof Function.name == 'string';\n\n\t /**\n\t * Detect if the DOM is supported.\n\t *\n\t * @memberOf _.support\n\t * @type boolean\n\t */\n\t try {\n\t support.dom = document.createDocumentFragment().nodeType === 11;\n\t } catch(e) {\n\t support.dom = false;\n\t }\n\n\t /**\n\t * Detect if `arguments` object indexes are non-enumerable.\n\t *\n\t * In Firefox < 4, IE < 9, PhantomJS, and Safari < 5.1 `arguments` object\n\t * indexes are non-enumerable. Chrome < 25 and Node.js < 0.11.0 treat\n\t * `arguments` object indexes as non-enumerable and fail `hasOwnProperty`\n\t * checks for indexes that exceed their function's formal parameters with\n\t * associated values of `0`.\n\t *\n\t * @memberOf _.support\n\t * @type boolean\n\t */\n\t try {\n\t support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1);\n\t } catch(e) {\n\t support.nonEnumArgs = true;\n\t }\n\t }(0, 0));\n\n\t /**\n\t * By default, the template delimiters used by lodash are like those in\n\t * embedded Ruby (ERB). Change the following template settings to use\n\t * alternative delimiters.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Object\n\t */\n\t lodash.templateSettings = {\n\n\t /**\n\t * Used to detect `data` property values to be HTML-escaped.\n\t *\n\t * @memberOf _.templateSettings\n\t * @type RegExp\n\t */\n\t 'escape': reEscape,\n\n\t /**\n\t * Used to detect code to be evaluated.\n\t *\n\t * @memberOf _.templateSettings\n\t * @type RegExp\n\t */\n\t 'evaluate': reEvaluate,\n\n\t /**\n\t * Used to detect `data` property values to inject.\n\t *\n\t * @memberOf _.templateSettings\n\t * @type RegExp\n\t */\n\t 'interpolate': reInterpolate,\n\n\t /**\n\t * Used to reference the data object in the template text.\n\t *\n\t * @memberOf _.templateSettings\n\t * @type string\n\t */\n\t 'variable': '',\n\n\t /**\n\t * Used to import variables into the compiled template.\n\t *\n\t * @memberOf _.templateSettings\n\t * @type Object\n\t */\n\t 'imports': {\n\n\t /**\n\t * A reference to the `lodash` function.\n\t *\n\t * @memberOf _.templateSettings.imports\n\t * @type Function\n\t */\n\t '_': lodash\n\t }\n\t };\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n\t *\n\t * @private\n\t * @param {*} value The value to wrap.\n\t */\n\t function LazyWrapper(value) {\n\t this.actions = null;\n\t this.dir = 1;\n\t this.dropCount = 0;\n\t this.filtered = false;\n\t this.iteratees = null;\n\t this.takeCount = POSITIVE_INFINITY;\n\t this.views = null;\n\t this.wrapped = value;\n\t }\n\n\t /**\n\t * Creates a clone of the lazy wrapper object.\n\t *\n\t * @private\n\t * @name clone\n\t * @memberOf LazyWrapper\n\t * @returns {Object} Returns the cloned `LazyWrapper` object.\n\t */\n\t function lazyClone() {\n\t var actions = this.actions,\n\t iteratees = this.iteratees,\n\t views = this.views,\n\t result = new LazyWrapper(this.wrapped);\n\n\t result.actions = actions ? arrayCopy(actions) : null;\n\t result.dir = this.dir;\n\t result.dropCount = this.dropCount;\n\t result.filtered = this.filtered;\n\t result.iteratees = iteratees ? arrayCopy(iteratees) : null;\n\t result.takeCount = this.takeCount;\n\t result.views = views ? arrayCopy(views) : null;\n\t return result;\n\t }\n\n\t /**\n\t * Reverses the direction of lazy iteration.\n\t *\n\t * @private\n\t * @name reverse\n\t * @memberOf LazyWrapper\n\t * @returns {Object} Returns the new reversed `LazyWrapper` object.\n\t */\n\t function lazyReverse() {\n\t if (this.filtered) {\n\t var result = new LazyWrapper(this);\n\t result.dir = -1;\n\t result.filtered = true;\n\t } else {\n\t result = this.clone();\n\t result.dir *= -1;\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Extracts the unwrapped value from its lazy wrapper.\n\t *\n\t * @private\n\t * @name value\n\t * @memberOf LazyWrapper\n\t * @returns {*} Returns the unwrapped value.\n\t */\n\t function lazyValue() {\n\t var array = this.wrapped.value();\n\t if (!isArray(array)) {\n\t return baseWrapperValue(array, this.actions);\n\t }\n\t var dir = this.dir,\n\t isRight = dir < 0,\n\t view = getView(0, array.length, this.views),\n\t start = view.start,\n\t end = view.end,\n\t length = end - start,\n\t dropCount = this.dropCount,\n\t takeCount = nativeMin(length, this.takeCount - dropCount),\n\t index = isRight ? end : start - 1,\n\t iteratees = this.iteratees,\n\t iterLength = iteratees ? iteratees.length : 0,\n\t resIndex = 0,\n\t result = [];\n\n\t outer:\n\t while (length-- && resIndex < takeCount) {\n\t index += dir;\n\n\t var iterIndex = -1,\n\t value = array[index];\n\n\t while (++iterIndex < iterLength) {\n\t var data = iteratees[iterIndex],\n\t iteratee = data.iteratee,\n\t computed = iteratee(value, index, array),\n\t type = data.type;\n\n\t if (type == LAZY_MAP_FLAG) {\n\t value = computed;\n\t } else if (!computed) {\n\t if (type == LAZY_FILTER_FLAG) {\n\t continue outer;\n\t } else {\n\t break outer;\n\t }\n\t }\n\t }\n\t if (dropCount) {\n\t dropCount--;\n\t } else {\n\t result[resIndex++] = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates a cache object to store key/value pairs.\n\t *\n\t * @private\n\t * @static\n\t * @name Cache\n\t * @memberOf _.memoize\n\t */\n\t function MapCache() {\n\t this.__data__ = {};\n\t }\n\n\t /**\n\t * Removes `key` and its value from the cache.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf _.memoize.Cache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.\n\t */\n\t function mapDelete(key) {\n\t return this.has(key) && delete this.__data__[key];\n\t }\n\n\t /**\n\t * Gets the cached value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf _.memoize.Cache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the cached value.\n\t */\n\t function mapGet(key) {\n\t return key == '__proto__' ? undefined : this.__data__[key];\n\t }\n\n\t /**\n\t * Checks if a cached value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf _.memoize.Cache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\t function mapHas(key) {\n\t return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\n\t }\n\n\t /**\n\t * Adds `value` to `key` of the cache.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf _.memoize.Cache\n\t * @param {string} key The key of the value to cache.\n\t * @param {*} value The value to cache.\n\t * @returns {Object} Returns the cache object.\n\t */\n\t function mapSet(key, value) {\n\t if (key != '__proto__') {\n\t this.__data__[key] = value;\n\t }\n\t return this;\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t *\n\t * Creates a cache object to store unique values.\n\t *\n\t * @private\n\t * @param {Array} [values] The values to cache.\n\t */\n\t function SetCache(values) {\n\t var length = values ? values.length : 0;\n\n\t this.data = { 'hash': nativeCreate(null), 'set': new Set };\n\t while (length--) {\n\t this.push(values[length]);\n\t }\n\t }\n\n\t /**\n\t * Checks if `value` is in `cache` mimicking the return signature of\n\t * `_.indexOf` by returning `0` if the value is found, else `-1`.\n\t *\n\t * @private\n\t * @param {Object} cache The cache to search.\n\t * @param {*} value The value to search for.\n\t * @returns {number} Returns `0` if `value` is found, else `-1`.\n\t */\n\t function cacheIndexOf(cache, value) {\n\t var data = cache.data,\n\t result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\n\n\t return result ? 0 : -1;\n\t }\n\n\t /**\n\t * Adds `value` to the cache.\n\t *\n\t * @private\n\t * @name push\n\t * @memberOf SetCache\n\t * @param {*} value The value to cache.\n\t */\n\t function cachePush(value) {\n\t var data = this.data;\n\t if (typeof value == 'string' || isObject(value)) {\n\t data.set.add(value);\n\t } else {\n\t data.hash[value] = true;\n\t }\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Copies the values of `source` to `array`.\n\t *\n\t * @private\n\t * @param {Array} source The array to copy values from.\n\t * @param {Array} [array=[]] The array to copy values to.\n\t * @returns {Array} Returns `array`.\n\t */\n\t function arrayCopy(source, array) {\n\t var index = -1,\n\t length = source.length;\n\n\t array || (array = Array(length));\n\t while (++index < length) {\n\t array[index] = source[index];\n\t }\n\t return array;\n\t }\n\n\t /**\n\t * A specialized version of `_.forEach` for arrays without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array} Returns `array`.\n\t */\n\t function arrayEach(array, iteratee) {\n\t var index = -1,\n\t length = array.length;\n\n\t while (++index < length) {\n\t if (iteratee(array[index], index, array) === false) {\n\t break;\n\t }\n\t }\n\t return array;\n\t }\n\n\t /**\n\t * A specialized version of `_.forEachRight` for arrays without support for\n\t * callback shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array} Returns `array`.\n\t */\n\t function arrayEachRight(array, iteratee) {\n\t var length = array.length;\n\n\t while (length--) {\n\t if (iteratee(array[length], length, array) === false) {\n\t break;\n\t }\n\t }\n\t return array;\n\t }\n\n\t /**\n\t * A specialized version of `_.every` for arrays without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {boolean} Returns `true` if all elements pass the predicate check,\n\t * else `false`.\n\t */\n\t function arrayEvery(array, predicate) {\n\t var index = -1,\n\t length = array.length;\n\n\t while (++index < length) {\n\t if (!predicate(array[index], index, array)) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\n\t /**\n\t * A specialized version of `_.filter` for arrays without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {Array} Returns the new filtered array.\n\t */\n\t function arrayFilter(array, predicate) {\n\t var index = -1,\n\t length = array.length,\n\t resIndex = -1,\n\t result = [];\n\n\t while (++index < length) {\n\t var value = array[index];\n\t if (predicate(value, index, array)) {\n\t result[++resIndex] = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * A specialized version of `_.map` for arrays without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array} Returns the new mapped array.\n\t */\n\t function arrayMap(array, iteratee) {\n\t var index = -1,\n\t length = array.length,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t result[index] = iteratee(array[index], index, array);\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * A specialized version of `_.max` for arrays without support for iteratees.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @returns {*} Returns the maximum value.\n\t */\n\t function arrayMax(array) {\n\t var index = -1,\n\t length = array.length,\n\t result = NEGATIVE_INFINITY;\n\n\t while (++index < length) {\n\t var value = array[index];\n\t if (value > result) {\n\t result = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * A specialized version of `_.min` for arrays without support for iteratees.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @returns {*} Returns the minimum value.\n\t */\n\t function arrayMin(array) {\n\t var index = -1,\n\t length = array.length,\n\t result = POSITIVE_INFINITY;\n\n\t while (++index < length) {\n\t var value = array[index];\n\t if (value < result) {\n\t result = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * A specialized version of `_.reduce` for arrays without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {*} [accumulator] The initial value.\n\t * @param {boolean} [initFromArray] Specify using the first element of `array`\n\t * as the initial value.\n\t * @returns {*} Returns the accumulated value.\n\t */\n\t function arrayReduce(array, iteratee, accumulator, initFromArray) {\n\t var index = -1,\n\t length = array.length;\n\n\t if (initFromArray && length) {\n\t accumulator = array[++index];\n\t }\n\t while (++index < length) {\n\t accumulator = iteratee(accumulator, array[index], index, array);\n\t }\n\t return accumulator;\n\t }\n\n\t /**\n\t * A specialized version of `_.reduceRight` for arrays without support for\n\t * callback shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {*} [accumulator] The initial value.\n\t * @param {boolean} [initFromArray] Specify using the last element of `array`\n\t * as the initial value.\n\t * @returns {*} Returns the accumulated value.\n\t */\n\t function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\n\t var length = array.length;\n\t if (initFromArray && length) {\n\t accumulator = array[--length];\n\t }\n\t while (length--) {\n\t accumulator = iteratee(accumulator, array[length], length, array);\n\t }\n\t return accumulator;\n\t }\n\n\t /**\n\t * A specialized version of `_.some` for arrays without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {boolean} Returns `true` if any element passes the predicate check,\n\t * else `false`.\n\t */\n\t function arraySome(array, predicate) {\n\t var index = -1,\n\t length = array.length;\n\n\t while (++index < length) {\n\t if (predicate(array[index], index, array)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t }\n\n\t /**\n\t * Used by `_.defaults` to customize its `_.assign` use.\n\t *\n\t * @private\n\t * @param {*} objectValue The destination object property value.\n\t * @param {*} sourceValue The source object property value.\n\t * @returns {*} Returns the value to assign to the destination object.\n\t */\n\t function assignDefaults(objectValue, sourceValue) {\n\t return typeof objectValue == 'undefined' ? sourceValue : objectValue;\n\t }\n\n\t /**\n\t * Used by `_.template` to customize its `_.assign` use.\n\t *\n\t * **Note:** This method is like `assignDefaults` except that it ignores\n\t * inherited property values when checking if a property is `undefined`.\n\t *\n\t * @private\n\t * @param {*} objectValue The destination object property value.\n\t * @param {*} sourceValue The source object property value.\n\t * @param {string} key The key associated with the object and source values.\n\t * @param {Object} object The destination object.\n\t * @returns {*} Returns the value to assign to the destination object.\n\t */\n\t function assignOwnDefaults(objectValue, sourceValue, key, object) {\n\t return (typeof objectValue == 'undefined' || !hasOwnProperty.call(object, key))\n\t ? sourceValue\n\t : objectValue;\n\t }\n\n\t /**\n\t * The base implementation of `_.assign` without support for argument juggling,\n\t * multiple sources, and `this` binding `customizer` functions.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @param {Function} [customizer] The function to customize assigning values.\n\t * @returns {Object} Returns the destination object.\n\t */\n\t function baseAssign(object, source, customizer) {\n\t var props = keys(source);\n\t if (!customizer) {\n\t return baseCopy(source, object, props);\n\t }\n\t var index = -1,\n\t length = props.length\n\n\t while (++index < length) {\n\t var key = props[index],\n\t value = object[key],\n\t result = customizer(value, source[key], key, object, source);\n\n\t if ((result === result ? result !== value : value === value) ||\n\t (typeof value == 'undefined' && !(key in object))) {\n\t object[key] = result;\n\t }\n\t }\n\t return object;\n\t }\n\n\t /**\n\t * The base implementation of `_.at` without support for strings and individual\n\t * key arguments.\n\t *\n\t * @private\n\t * @param {Array|Object} collection The collection to iterate over.\n\t * @param {number[]|string[]} [props] The property names or indexes of elements to pick.\n\t * @returns {Array} Returns the new array of picked elements.\n\t */\n\t function baseAt(collection, props) {\n\t var index = -1,\n\t length = collection.length,\n\t isArr = isLength(length),\n\t propsLength = props.length,\n\t result = Array(propsLength);\n\n\t while(++index < propsLength) {\n\t var key = props[index];\n\t if (isArr) {\n\t key = parseFloat(key);\n\t result[index] = isIndex(key, length) ? collection[key] : undefined;\n\t } else {\n\t result[index] = collection[key];\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Copies the properties of `source` to `object`.\n\t *\n\t * @private\n\t * @param {Object} source The object to copy properties from.\n\t * @param {Object} [object={}] The object to copy properties to.\n\t * @param {Array} props The property names to copy.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseCopy(source, object, props) {\n\t if (!props) {\n\t props = object;\n\t object = {};\n\t }\n\t var index = -1,\n\t length = props.length;\n\n\t while (++index < length) {\n\t var key = props[index];\n\t object[key] = source[key];\n\t }\n\t return object;\n\t }\n\n\t /**\n\t * The base implementation of `_.bindAll` without support for individual\n\t * method name arguments.\n\t *\n\t * @private\n\t * @param {Object} object The object to bind and assign the bound methods to.\n\t * @param {string[]} methodNames The object method names to bind.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseBindAll(object, methodNames) {\n\t var index = -1,\n\t length = methodNames.length;\n\n\t while (++index < length) {\n\t var key = methodNames[index];\n\t object[key] = createWrapper(object[key], BIND_FLAG, object);\n\t }\n\t return object;\n\t }\n\n\t /**\n\t * The base implementation of `_.callback` which supports specifying the\n\t * number of arguments to provide to `func`.\n\t *\n\t * @private\n\t * @param {*} [func=_.identity] The value to convert to a callback.\n\t * @param {*} [thisArg] The `this` binding of `func`.\n\t * @param {number} [argCount] The number of arguments to provide to `func`.\n\t * @returns {Function} Returns the callback.\n\t */\n\t function baseCallback(func, thisArg, argCount) {\n\t var type = typeof func;\n\t if (type == 'function') {\n\t return (typeof thisArg != 'undefined' && isBindable(func))\n\t ? bindCallback(func, thisArg, argCount)\n\t : func;\n\t }\n\t if (func == null) {\n\t return identity;\n\t }\n\t // Handle \"_.property\" and \"_.matches\" style callback shorthands.\n\t return type == 'object'\n\t ? baseMatches(func)\n\t : baseProperty(func + '');\n\t }\n\n\t /**\n\t * The base implementation of `_.clone` without support for argument juggling\n\t * and `this` binding `customizer` functions.\n\t *\n\t * @private\n\t * @param {*} value The value to clone.\n\t * @param {boolean} [isDeep] Specify a deep clone.\n\t * @param {Function} [customizer] The function to customize cloning values.\n\t * @param {string} [key] The key of `value`.\n\t * @param {Object} [object] The object `value` belongs to.\n\t * @param {Array} [stackA=[]] Tracks traversed source objects.\n\t * @param {Array} [stackB=[]] Associates clones with source counterparts.\n\t * @returns {*} Returns the cloned value.\n\t */\n\t function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n\t var result;\n\t if (customizer) {\n\t result = object ? customizer(value, key, object) : customizer(value);\n\t }\n\t if (typeof result != 'undefined') {\n\t return result;\n\t }\n\t if (!isObject(value)) {\n\t return value;\n\t }\n\t var isArr = isArray(value);\n\t if (isArr) {\n\t result = initCloneArray(value);\n\t if (!isDeep) {\n\t return arrayCopy(value, result);\n\t }\n\t } else {\n\t var tag = objToString.call(value),\n\t isFunc = tag == funcTag;\n\n\t if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n\t result = initCloneObject(isFunc ? {} : value);\n\t if (!isDeep) {\n\t return baseCopy(value, result, keys(value));\n\t }\n\t } else {\n\t return cloneableTags[tag]\n\t ? initCloneByTag(value, tag, isDeep)\n\t : (object ? value : {});\n\t }\n\t }\n\t // Check for circular references and return corresponding clone.\n\t stackA || (stackA = []);\n\t stackB || (stackB = []);\n\n\t var length = stackA.length;\n\t while (length--) {\n\t if (stackA[length] == value) {\n\t return stackB[length];\n\t }\n\t }\n\t // Add the source value to the stack of traversed objects and associate it with its clone.\n\t stackA.push(value);\n\t stackB.push(result);\n\n\t // Recursively populate clone (susceptible to call stack limits).\n\t (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n\t result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.create` without support for assigning\n\t * properties to the created object.\n\t *\n\t * @private\n\t * @param {Object} prototype The object to inherit from.\n\t * @returns {Object} Returns the new object.\n\t */\n\t var baseCreate = (function() {\n\t function Object() {}\n\t return function(prototype) {\n\t if (isObject(prototype)) {\n\t Object.prototype = prototype;\n\t var result = new Object;\n\t Object.prototype = null;\n\t }\n\t return result || context.Object();\n\t };\n\t }());\n\n\t /**\n\t * The base implementation of `_.delay` and `_.defer` which accepts an index\n\t * of where to slice the arguments to provide to `func`.\n\t *\n\t * @private\n\t * @param {Function} func The function to delay.\n\t * @param {number} wait The number of milliseconds to delay invocation.\n\t * @param {Object} args The `arguments` object to slice and provide to `func`.\n\t * @returns {number} Returns the timer id.\n\t */\n\t function baseDelay(func, wait, args, fromIndex) {\n\t if (!isFunction(func)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t return setTimeout(function() { func.apply(undefined, baseSlice(args, fromIndex)); }, wait);\n\t }\n\n\t /**\n\t * The base implementation of `_.difference` which accepts a single array\n\t * of values to exclude.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {Array} values The values to exclude.\n\t * @returns {Array} Returns the new array of filtered values.\n\t */\n\t function baseDifference(array, values) {\n\t var length = array ? array.length : 0,\n\t result = [];\n\n\t if (!length) {\n\t return result;\n\t }\n\t var index = -1,\n\t indexOf = getIndexOf(),\n\t isCommon = indexOf == baseIndexOf,\n\t cache = isCommon && values.length >= 200 && createCache(values),\n\t valuesLength = values.length;\n\n\t if (cache) {\n\t indexOf = cacheIndexOf;\n\t isCommon = false;\n\t values = cache;\n\t }\n\t outer:\n\t while (++index < length) {\n\t var value = array[index];\n\n\t if (isCommon && value === value) {\n\t var valuesIndex = valuesLength;\n\t while (valuesIndex--) {\n\t if (values[valuesIndex] === value) {\n\t continue outer;\n\t }\n\t }\n\t result.push(value);\n\t }\n\t else if (indexOf(values, value) < 0) {\n\t result.push(value);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.forEach` without support for callback\n\t * shorthands and `this` binding.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array|Object|string} Returns `collection`.\n\t */\n\t function baseEach(collection, iteratee) {\n\t var length = collection ? collection.length : 0;\n\t if (!isLength(length)) {\n\t return baseForOwn(collection, iteratee);\n\t }\n\t var index = -1,\n\t iterable = toObject(collection);\n\n\t while (++index < length) {\n\t if (iteratee(iterable[index], index, iterable) === false) {\n\t break;\n\t }\n\t }\n\t return collection;\n\t }\n\n\t /**\n\t * The base implementation of `_.forEachRight` without support for callback\n\t * shorthands and `this` binding.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array|Object|string} Returns `collection`.\n\t */\n\t function baseEachRight(collection, iteratee) {\n\t var length = collection ? collection.length : 0;\n\t if (!isLength(length)) {\n\t return baseForOwnRight(collection, iteratee);\n\t }\n\t var iterable = toObject(collection);\n\t while (length--) {\n\t if (iteratee(iterable[length], length, iterable) === false) {\n\t break;\n\t }\n\t }\n\t return collection;\n\t }\n\n\t /**\n\t * The base implementation of `_.every` without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {boolean} Returns `true` if all elements pass the predicate check,\n\t * else `false`\n\t */\n\t function baseEvery(collection, predicate) {\n\t var result = true;\n\t baseEach(collection, function(value, index, collection) {\n\t result = !!predicate(value, index, collection);\n\t return result;\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.filter` without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {Array} Returns the new filtered array.\n\t */\n\t function baseFilter(collection, predicate) {\n\t var result = [];\n\t baseEach(collection, function(value, index, collection) {\n\t if (predicate(value, index, collection)) {\n\t result.push(value);\n\t }\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,\n\t * without support for callback shorthands and `this` binding, which iterates\n\t * over `collection` using the provided `eachFunc`.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to search.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @param {Function} eachFunc The function to iterate over `collection`.\n\t * @param {boolean} [retKey] Specify returning the key of the found element\n\t * instead of the element itself.\n\t * @returns {*} Returns the found element or its key, else `undefined`.\n\t */\n\t function baseFind(collection, predicate, eachFunc, retKey) {\n\t var result;\n\t eachFunc(collection, function(value, key, collection) {\n\t if (predicate(value, key, collection)) {\n\t result = retKey ? key : value;\n\t return false;\n\t }\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.flatten` with added support for restricting\n\t * flattening and specifying the start index.\n\t *\n\t * @private\n\t * @param {Array} array The array to flatten.\n\t * @param {boolean} [isDeep] Specify a deep flatten.\n\t * @param {boolean} [isStrict] Restrict flattening to arrays and `arguments` objects.\n\t * @param {number} [fromIndex=0] The index to start from.\n\t * @returns {Array} Returns the new flattened array.\n\t */\n\t function baseFlatten(array, isDeep, isStrict, fromIndex) {\n\t var index = (fromIndex || 0) - 1,\n\t length = array.length,\n\t resIndex = -1,\n\t result = [];\n\n\t while (++index < length) {\n\t var value = array[index];\n\n\t if (isObjectLike(value) && isLength(value.length) && (isArray(value) || isArguments(value))) {\n\t if (isDeep) {\n\t // Recursively flatten arrays (susceptible to call stack limits).\n\t value = baseFlatten(value, isDeep, isStrict);\n\t }\n\t var valIndex = -1,\n\t valLength = value.length;\n\n\t result.length += valLength;\n\t while (++valIndex < valLength) {\n\t result[++resIndex] = value[valIndex];\n\t }\n\t } else if (!isStrict) {\n\t result[++resIndex] = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `baseForIn` and `baseForOwn` which iterates\n\t * over `object` properties returned by `keysFunc` invoking `iteratee` for\n\t * each property. Iterator functions may exit iteration early by explicitly\n\t * returning `false`.\n\t *\n\t * @private\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {Function} keysFunc The function to get the keys of `object`.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseFor(object, iteratee, keysFunc) {\n\t var index = -1,\n\t iterable = toObject(object),\n\t props = keysFunc(object),\n\t length = props.length;\n\n\t while (++index < length) {\n\t var key = props[index];\n\t if (iteratee(iterable[key], key, iterable) === false) {\n\t break;\n\t }\n\t }\n\t return object;\n\t }\n\n\t /**\n\t * This function is like `baseFor` except that it iterates over properties\n\t * in the opposite order.\n\t *\n\t * @private\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {Function} keysFunc The function to get the keys of `object`.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseForRight(object, iteratee, keysFunc) {\n\t var iterable = toObject(object),\n\t props = keysFunc(object),\n\t length = props.length;\n\n\t while (length--) {\n\t var key = props[length];\n\t if (iteratee(iterable[key], key, iterable) === false) {\n\t break;\n\t }\n\t }\n\t return object;\n\t }\n\n\t /**\n\t * The base implementation of `_.forIn` without support for callback\n\t * shorthands and `this` binding.\n\t *\n\t * @private\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseForIn(object, iteratee) {\n\t return baseFor(object, iteratee, keysIn);\n\t }\n\n\t /**\n\t * The base implementation of `_.forOwn` without support for callback\n\t * shorthands and `this` binding.\n\t *\n\t * @private\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseForOwn(object, iteratee) {\n\t return baseFor(object, iteratee, keys);\n\t }\n\n\t /**\n\t * The base implementation of `_.forOwnRight` without support for callback\n\t * shorthands and `this` binding.\n\t *\n\t * @private\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t */\n\t function baseForOwnRight(object, iteratee) {\n\t return baseForRight(object, iteratee, keys);\n\t }\n\n\t /**\n\t * The base implementation of `_.functions` which creates an array of\n\t * `object` function property names filtered from those provided.\n\t *\n\t * @private\n\t * @param {Object} object The object to inspect.\n\t * @param {Array} props The property names to filter.\n\t * @returns {Array} Returns the new array of filtered property names.\n\t */\n\t function baseFunctions(object, props) {\n\t var index = -1,\n\t length = props.length,\n\t resIndex = -1,\n\t result = [];\n\n\t while (++index < length) {\n\t var key = props[index];\n\t if (isFunction(object[key])) {\n\t result[++resIndex] = key;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.invoke` which requires additional arguments\n\t * to be provided as an array of arguments rather than individually.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|string} methodName The name of the method to invoke or\n\t * the function invoked per iteration.\n\t * @param {Array} [args] The arguments to invoke the method with.\n\t * @returns {Array} Returns the array of results.\n\t */\n\t function baseInvoke(collection, methodName, args) {\n\t var index = -1,\n\t isFunc = typeof methodName == 'function',\n\t length = collection ? collection.length : 0,\n\t result = isLength(length) ? Array(length) : [];\n\n\t baseEach(collection, function(value) {\n\t var func = isFunc ? methodName : (value != null && value[methodName]);\n\t result[++index] = func ? func.apply(value, args) : undefined;\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.isEqual` without support for `this` binding\n\t * `customizer` functions.\n\t *\n\t * @private\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @param {Function} [customizer] The function to customize comparing values.\n\t * @param {boolean} [isWhere] Specify performing partial comparisons.\n\t * @param {Array} [stackA] Tracks traversed `value` objects.\n\t * @param {Array} [stackB] Tracks traversed `other` objects.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t */\n\t function baseIsEqual(value, other, customizer, isWhere, stackA, stackB) {\n\t // Exit early for identical values.\n\t if (value === other) {\n\t // Treat `+0` vs. `-0` as not equal.\n\t return value !== 0 || (1 / value == 1 / other);\n\t }\n\t var valType = typeof value,\n\t othType = typeof other;\n\n\t // Exit early for unlike primitive values.\n\t if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') ||\n\t value == null || other == null) {\n\t // Return `false` unless both values are `NaN`.\n\t return value !== value && other !== other;\n\t }\n\t return baseIsEqualDeep(value, other, baseIsEqual, customizer, isWhere, stackA, stackB);\n\t }\n\n\t /**\n\t * A specialized version of `baseIsEqual` for arrays and objects which performs\n\t * deep comparisons and tracks traversed objects enabling objects with circular\n\t * references to be compared.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare.\n\t * @param {Object} other The other object to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} [customizer] The function to customize comparing objects.\n\t * @param {boolean} [isWhere] Specify performing partial comparisons.\n\t * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n\t * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\t function baseIsEqualDeep(object, other, equalFunc, customizer, isWhere, stackA, stackB) {\n\t var objIsArr = isArray(object),\n\t othIsArr = isArray(other),\n\t objTag = arrayTag,\n\t othTag = arrayTag;\n\n\t if (!objIsArr) {\n\t objTag = objToString.call(object);\n\t if (objTag == argsTag) {\n\t objTag = objectTag;\n\t } else if (objTag != objectTag) {\n\t objIsArr = isTypedArray(object);\n\t }\n\t }\n\t if (!othIsArr) {\n\t othTag = objToString.call(other);\n\t if (othTag == argsTag) {\n\t othTag = objectTag;\n\t } else if (othTag != objectTag) {\n\t othIsArr = isTypedArray(other);\n\t }\n\t }\n\t var objIsObj = objTag == objectTag,\n\t othIsObj = othTag == objectTag,\n\t isSameTag = objTag == othTag;\n\n\t if (isSameTag && !(objIsArr || objIsObj)) {\n\t return equalByTag(object, other, objTag);\n\t }\n\t var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n\t othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n\t if (valWrapped || othWrapped) {\n\t return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isWhere, stackA, stackB);\n\t }\n\t if (!isSameTag) {\n\t return false;\n\t }\n\t // Assume cyclic values are equal.\n\t // For more information on detecting circular references see https://es5.github.io/#JO.\n\t stackA || (stackA = []);\n\t stackB || (stackB = []);\n\n\t var length = stackA.length;\n\t while (length--) {\n\t if (stackA[length] == object) {\n\t return stackB[length] == other;\n\t }\n\t }\n\t // Add `object` and `other` to the stack of traversed objects.\n\t stackA.push(object);\n\t stackB.push(other);\n\n\t var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isWhere, stackA, stackB);\n\n\t stackA.pop();\n\t stackB.pop();\n\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.isMatch` without support for callback\n\t * shorthands or `this` binding.\n\t *\n\t * @private\n\t * @param {Object} source The object to inspect.\n\t * @param {Array} props The source property names to match.\n\t * @param {Array} values The source values to match.\n\t * @param {Array} strictCompareFlags Strict comparison flags for source values.\n\t * @param {Function} [customizer] The function to customize comparing objects.\n\t * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n\t */\n\t function baseIsMatch(object, props, values, strictCompareFlags, customizer) {\n\t var length = props.length;\n\t if (object == null) {\n\t return !length;\n\t }\n\t var index = -1,\n\t noCustomizer = !customizer;\n\n\t while (++index < length) {\n\t if ((noCustomizer && strictCompareFlags[index])\n\t ? values[index] !== object[props[index]]\n\t : !hasOwnProperty.call(object, props[index])\n\t ) {\n\t return false;\n\t }\n\t }\n\t index = -1;\n\t while (++index < length) {\n\t var key = props[index];\n\t if (noCustomizer && strictCompareFlags[index]) {\n\t var result = hasOwnProperty.call(object, key);\n\t } else {\n\t var objValue = object[key],\n\t srcValue = values[index];\n\n\t result = customizer ? customizer(objValue, srcValue, key) : undefined;\n\t if (typeof result == 'undefined') {\n\t result = baseIsEqual(srcValue, objValue, customizer, true);\n\t }\n\t }\n\t if (!result) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\n\t /**\n\t * The base implementation of `_.map` without support for callback shorthands\n\t * or `this` binding.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array} Returns the new mapped array.\n\t */\n\t function baseMap(collection, iteratee) {\n\t var result = [];\n\t baseEach(collection, function(value, key, collection) {\n\t result.push(iteratee(value, key, collection));\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.matches` which supports specifying whether\n\t * `source` should be cloned.\n\t *\n\t * @private\n\t * @param {Object} source The object of property values to match.\n\t * @returns {Function} Returns the new function.\n\t */\n\t function baseMatches(source) {\n\t var props = keys(source),\n\t length = props.length;\n\n\t if (length == 1) {\n\t var key = props[0],\n\t value = source[key];\n\n\t if (isStrictComparable(value)) {\n\t return function(object) {\n\t return object != null && value === object[key] && hasOwnProperty.call(object, key);\n\t };\n\t }\n\t }\n\t var values = Array(length),\n\t strictCompareFlags = Array(length);\n\n\t while (length--) {\n\t value = source[props[length]];\n\t values[length] = value;\n\t strictCompareFlags[length] = isStrictComparable(value);\n\t }\n\t return function(object) {\n\t return baseIsMatch(object, props, values, strictCompareFlags);\n\t };\n\t }\n\n\t /**\n\t * The base implementation of `_.merge` without support for argument juggling,\n\t * multiple sources, and `this` binding `customizer` functions.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @param {Function} [customizer] The function to customize merging properties.\n\t * @param {Array} [stackA=[]] Tracks traversed source objects.\n\t * @param {Array} [stackB=[]] Associates values with source counterparts.\n\t * @returns {Object} Returns the destination object.\n\t */\n\t function baseMerge(object, source, customizer, stackA, stackB) {\n\t var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source));\n\n\t (isSrcArr ? arrayEach : baseForOwn)(source, function(srcValue, key, source) {\n\t if (isObjectLike(srcValue)) {\n\t stackA || (stackA = []);\n\t stackB || (stackB = []);\n\t return baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n\t }\n\t var value = object[key],\n\t result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n\t isCommon = typeof result == 'undefined';\n\n\t if (isCommon) {\n\t result = srcValue;\n\t }\n\t if ((isSrcArr || typeof result != 'undefined') &&\n\t (isCommon || (result === result ? result !== value : value === value))) {\n\t object[key] = result;\n\t }\n\t });\n\t return object;\n\t }\n\n\t /**\n\t * A specialized version of `baseMerge` for arrays and objects which performs\n\t * deep merges and tracks traversed objects enabling objects with circular\n\t * references to be merged.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @param {string} key The key of the value to merge.\n\t * @param {Function} mergeFunc The function to merge values.\n\t * @param {Function} [customizer] The function to customize merging properties.\n\t * @param {Array} [stackA=[]] Tracks traversed source objects.\n\t * @param {Array} [stackB=[]] Associates values with source counterparts.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\t function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n\t var length = stackA.length,\n\t srcValue = source[key];\n\n\t while (length--) {\n\t if (stackA[length] == srcValue) {\n\t object[key] = stackB[length];\n\t return;\n\t }\n\t }\n\t var value = object[key],\n\t result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n\t isCommon = typeof result == 'undefined';\n\n\t if (isCommon) {\n\t result = srcValue;\n\t if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {\n\t result = isArray(value)\n\t ? value\n\t : (value ? arrayCopy(value) : []);\n\t }\n\t else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n\t result = isArguments(value)\n\t ? toPlainObject(value)\n\t : (isPlainObject(value) ? value : {});\n\t }\n\t else {\n\t isCommon = false;\n\t }\n\t }\n\t // Add the source value to the stack of traversed objects and associate\n\t // it with its merged value.\n\t stackA.push(srcValue);\n\t stackB.push(result);\n\n\t if (isCommon) {\n\t // Recursively merge objects and arrays (susceptible to call stack limits).\n\t object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n\t } else if (result === result ? result !== value : value === value) {\n\t object[key] = result;\n\t }\n\t }\n\n\t /**\n\t * The base implementation of `_.property` which does not coerce `key` to a string.\n\t *\n\t * @private\n\t * @param {string} key The key of the property to get.\n\t * @returns {Function} Returns the new function.\n\t */\n\t function baseProperty(key) {\n\t return function(object) {\n\t return object == null ? undefined : object[key];\n\t };\n\t }\n\n\t /**\n\t * The base implementation of `_.pullAt` without support for individual\n\t * index arguments.\n\t *\n\t * @private\n\t * @param {Array} array The array to modify.\n\t * @param {number[]} indexes The indexes of elements to remove.\n\t * @returns {Array} Returns the new array of removed elements.\n\t */\n\t function basePullAt(array, indexes) {\n\t var length = indexes.length,\n\t result = baseAt(array, indexes);\n\n\t indexes.sort(baseCompareAscending);\n\t while (length--) {\n\t var index = parseFloat(indexes[length]);\n\t if (index != previous && isIndex(index)) {\n\t var previous = index;\n\t splice.call(array, index, 1);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.random` without support for argument juggling\n\t * and returning floating-point numbers.\n\t *\n\t * @private\n\t * @param {number} min The minimum possible value.\n\t * @param {number} max The maximum possible value.\n\t * @returns {number} Returns the random number.\n\t */\n\t function baseRandom(min, max) {\n\t return min + floor(nativeRandom() * (max - min + 1));\n\t }\n\n\t /**\n\t * The base implementation of `_.reduce` and `_.reduceRight` without support\n\t * for callback shorthands or `this` binding, which iterates over `collection`\n\t * using the provided `eachFunc`.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {*} accumulator The initial value.\n\t * @param {boolean} initFromCollection Specify using the first or last element\n\t * of `collection` as the initial value.\n\t * @param {Function} eachFunc The function to iterate over `collection`.\n\t * @returns {*} Returns the accumulated value.\n\t */\n\t function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\n\t eachFunc(collection, function(value, index, collection) {\n\t accumulator = initFromCollection\n\t ? (initFromCollection = false, value)\n\t : iteratee(accumulator, value, index, collection)\n\t });\n\t return accumulator;\n\t }\n\n\t /**\n\t * The base implementation of `setData` without support for hot loop detection.\n\t *\n\t * @private\n\t * @param {Function} func The function to associate metadata with.\n\t * @param {*} data The metadata.\n\t * @returns {Function} Returns `func`.\n\t */\n\t var baseSetData = !metaMap ? identity : function(func, data) {\n\t metaMap.set(func, data);\n\t return func;\n\t };\n\n\t /**\n\t * The base implementation of `_.slice` without an iteratee call guard.\n\t *\n\t * @private\n\t * @param {Array} array The array to slice.\n\t * @param {number} [start=0] The start position.\n\t * @param {number} [end=array.length] The end position.\n\t * @returns {Array} Returns the slice of `array`.\n\t */\n\t function baseSlice(array, start, end) {\n\t var index = -1,\n\t length = array.length;\n\n\t start = start == null ? 0 : (+start || 0);\n\t if (start < 0) {\n\t start = -start > length ? 0 : (length + start);\n\t }\n\t end = (typeof end == 'undefined' || end > length) ? length : (+end || 0);\n\t if (end < 0) {\n\t end += length;\n\t }\n\t length = start > end ? 0 : (end - start) >>> 0;\n\t start >>>= 0;\n\n\t var result = Array(length);\n\t while (++index < length) {\n\t result[index] = array[index + start];\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.some` without support for callback shorthands\n\t * or `this` binding.\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {boolean} Returns `true` if any element passes the predicate check,\n\t * else `false`.\n\t */\n\t function baseSome(collection, predicate) {\n\t var result;\n\n\t baseEach(collection, function(value, index, collection) {\n\t result = predicate(value, index, collection);\n\t return !result;\n\t });\n\t return !!result;\n\t }\n\n\t /**\n\t * The base implementation of `_.uniq` without support for callback shorthands\n\t * and `this` binding.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {Function} [iteratee] The function invoked per iteration.\n\t * @returns {Array} Returns the new duplicate-value-free array.\n\t */\n\t function baseUniq(array, iteratee) {\n\t var index = -1,\n\t indexOf = getIndexOf(),\n\t length = array.length,\n\t isCommon = indexOf == baseIndexOf,\n\t isLarge = isCommon && length >= 200,\n\t seen = isLarge && createCache(),\n\t result = [];\n\n\t if (seen) {\n\t indexOf = cacheIndexOf;\n\t isCommon = false;\n\t } else {\n\t isLarge = false;\n\t seen = iteratee ? [] : result;\n\t }\n\t outer:\n\t while (++index < length) {\n\t var value = array[index],\n\t computed = iteratee ? iteratee(value, index, array) : value;\n\n\t if (isCommon && value === value) {\n\t var seenIndex = seen.length;\n\t while (seenIndex--) {\n\t if (seen[seenIndex] === computed) {\n\t continue outer;\n\t }\n\t }\n\t if (iteratee) {\n\t seen.push(computed);\n\t }\n\t result.push(value);\n\t }\n\t else if (indexOf(seen, computed) < 0) {\n\t if (iteratee || isLarge) {\n\t seen.push(computed);\n\t }\n\t result.push(value);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `_.values` and `_.valuesIn` which creates an\n\t * array of `object` property values corresponding to the property names\n\t * returned by `keysFunc`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {Array} props The property names to get values for.\n\t * @returns {Object} Returns the array of property values.\n\t */\n\t function baseValues(object, props) {\n\t var index = -1,\n\t length = props.length,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t result[index] = object[props[index]];\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * The base implementation of `wrapperValue` which returns the result of\n\t * performing a sequence of actions on the unwrapped `value`, where each\n\t * successive action is supplied the return value of the previous.\n\t *\n\t * @private\n\t * @param {*} value The unwrapped value.\n\t * @param {Array} actions Actions to peform to resolve the unwrapped value.\n\t * @returns {*} Returns the resolved unwrapped value.\n\t */\n\t function baseWrapperValue(value, actions) {\n\t var result = value;\n\t if (result instanceof LazyWrapper) {\n\t result = result.value();\n\t }\n\t var index = -1,\n\t length = actions.length;\n\n\t while (++index < length) {\n\t var args = [result],\n\t action = actions[index];\n\n\t push.apply(args, action.args);\n\t result = action.func.apply(action.thisArg, args);\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Performs a binary search of `array` to determine the index at which `value`\n\t * should be inserted into `array` in order to maintain its sort order.\n\t *\n\t * @private\n\t * @param {Array} array The sorted array to inspect.\n\t * @param {*} value The value to evaluate.\n\t * @param {boolean} [retHighest] Specify returning the highest, instead\n\t * of the lowest, index at which a value should be inserted into `array`.\n\t * @returns {number} Returns the index at which `value` should be inserted\n\t * into `array`.\n\t */\n\t function binaryIndex(array, value, retHighest) {\n\t var low = 0,\n\t high = array ? array.length : low;\n\n\t if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n\t while (low < high) {\n\t var mid = (low + high) >>> 1,\n\t computed = array[mid];\n\n\t if (retHighest ? (computed <= value) : (computed < value)) {\n\t low = mid + 1;\n\t } else {\n\t high = mid;\n\t }\n\t }\n\t return high;\n\t }\n\t return binaryIndexBy(array, value, identity, retHighest);\n\t }\n\n\t /**\n\t * This function is like `binaryIndex` except that it invokes `iteratee` for\n\t * `value` and each element of `array` to compute their sort ranking. The\n\t * iteratee is invoked with one argument; (value).\n\t *\n\t * @private\n\t * @param {Array} array The sorted array to inspect.\n\t * @param {*} value The value to evaluate.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {boolean} [retHighest] Specify returning the highest, instead\n\t * of the lowest, index at which a value should be inserted into `array`.\n\t * @returns {number} Returns the index at which `value` should be inserted\n\t * into `array`.\n\t */\n\t function binaryIndexBy(array, value, iteratee, retHighest) {\n\t value = iteratee(value);\n\n\t var low = 0,\n\t high = array ? array.length : 0,\n\t valIsNaN = value !== value,\n\t valIsUndef = typeof value == 'undefined';\n\n\t while (low < high) {\n\t var mid = floor((low + high) / 2),\n\t computed = iteratee(array[mid]),\n\t isReflexive = computed === computed;\n\n\t if (valIsNaN) {\n\t var setLow = isReflexive || retHighest;\n\t } else if (valIsUndef) {\n\t setLow = isReflexive && (retHighest || typeof computed != 'undefined');\n\t } else {\n\t setLow = retHighest ? (computed <= value) : (computed < value);\n\t }\n\t if (setLow) {\n\t low = mid + 1;\n\t } else {\n\t high = mid;\n\t }\n\t }\n\t return nativeMin(high, MAX_ARRAY_INDEX);\n\t }\n\n\t /**\n\t * A specialized version of `baseCallback` which only supports `this` binding\n\t * and specifying the number of arguments to provide to `func`.\n\t *\n\t * @private\n\t * @param {Function} func The function to bind.\n\t * @param {*} thisArg The `this` binding of `func`.\n\t * @param {number} [argCount] The number of arguments to provide to `func`.\n\t * @returns {Function} Returns the callback.\n\t */\n\t function bindCallback(func, thisArg, argCount) {\n\t if (typeof func != 'function') {\n\t return identity;\n\t }\n\t if (typeof thisArg == 'undefined') {\n\t return func;\n\t }\n\t switch (argCount) {\n\t case 1: return function(value) {\n\t return func.call(thisArg, value);\n\t };\n\t case 3: return function(value, index, collection) {\n\t return func.call(thisArg, value, index, collection);\n\t };\n\t case 4: return function(accumulator, value, index, collection) {\n\t return func.call(thisArg, accumulator, value, index, collection);\n\t };\n\t case 5: return function(value, other, key, object, source) {\n\t return func.call(thisArg, value, other, key, object, source);\n\t };\n\t }\n\t return function() {\n\t return func.apply(thisArg, arguments);\n\t };\n\t }\n\n\t /**\n\t * Creates a clone of the given array buffer.\n\t *\n\t * @private\n\t * @param {ArrayBuffer} buffer The array buffer to clone.\n\t * @returns {ArrayBuffer} Returns the cloned array buffer.\n\t */\n\t function bufferClone(buffer) {\n\t return bufferSlice.call(buffer, 0);\n\t }\n\t if (!bufferSlice) {\n\t // PhantomJS has `ArrayBuffer` and `Uint8Array` but not `Float64Array`.\n\t bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) {\n\t var byteLength = buffer.byteLength,\n\t floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0,\n\t offset = floatLength * FLOAT64_BYTES_PER_ELEMENT,\n\t result = new ArrayBuffer(byteLength);\n\n\t if (floatLength) {\n\t var view = new Float64Array(result, 0, floatLength);\n\t view.set(new Float64Array(buffer, 0, floatLength));\n\t }\n\t if (byteLength != offset) {\n\t view = new Uint8Array(result, offset);\n\t view.set(new Uint8Array(buffer, offset));\n\t }\n\t return result;\n\t };\n\t }\n\n\t /**\n\t * Creates an array that is the composition of partially applied arguments,\n\t * placeholders, and provided arguments into a single array of arguments.\n\t *\n\t * @private\n\t * @param {Array|Object} args The provided arguments.\n\t * @param {Array} partials The arguments to prepend to those provided.\n\t * @param {Array} holders The `partials` placeholder indexes.\n\t * @returns {Array} Returns the new array of composed arguments.\n\t */\n\t function composeArgs(args, partials, holders) {\n\t var holdersLength = holders.length,\n\t argsIndex = -1,\n\t argsLength = nativeMax(args.length - holdersLength, 0),\n\t leftIndex = -1,\n\t leftLength = partials.length,\n\t result = Array(argsLength + leftLength);\n\n\t while (++leftIndex < leftLength) {\n\t result[leftIndex] = partials[leftIndex];\n\t }\n\t while (++argsIndex < holdersLength) {\n\t result[holders[argsIndex]] = args[argsIndex];\n\t }\n\t while (argsLength--) {\n\t result[leftIndex++] = args[argsIndex++];\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * This function is like `composeArgs` except that the arguments composition\n\t * is tailored for `_.partialRight`.\n\t *\n\t * @private\n\t * @param {Array|Object} args The provided arguments.\n\t * @param {Array} partials The arguments to append to those provided.\n\t * @param {Array} holders The `partials` placeholder indexes.\n\t * @returns {Array} Returns the new array of composed arguments.\n\t */\n\t function composeArgsRight(args, partials, holders) {\n\t var holdersIndex = -1,\n\t holdersLength = holders.length,\n\t argsIndex = -1,\n\t argsLength = nativeMax(args.length - holdersLength, 0),\n\t rightIndex = -1,\n\t rightLength = partials.length,\n\t result = Array(argsLength + rightLength);\n\n\t while (++argsIndex < argsLength) {\n\t result[argsIndex] = args[argsIndex];\n\t }\n\t var pad = argsIndex;\n\t while (++rightIndex < rightLength) {\n\t result[pad + rightIndex] = partials[rightIndex];\n\t }\n\t while (++holdersIndex < holdersLength) {\n\t result[pad + holders[holdersIndex]] = args[argsIndex++];\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates a function that aggregates a collection, creating an accumulator\n\t * object composed from the results of running each element in the collection\n\t * through an iteratee. The `setter` sets the keys and values of the accumulator\n\t * object. If `initializer` is provided initializes the accumulator object.\n\t *\n\t * @private\n\t * @param {Function} setter The function to set keys and values of the accumulator object.\n\t * @param {Function} [initializer] The function to initialize the accumulator object.\n\t * @returns {Function} Returns the new aggregator function.\n\t */\n\t function createAggregator(setter, initializer) {\n\t return function(collection, iteratee, thisArg) {\n\t var result = initializer ? initializer() : {};\n\t iteratee = getCallback(iteratee, thisArg, 3);\n\n\t if (isArray(collection)) {\n\t var index = -1,\n\t length = collection.length;\n\n\t while (++index < length) {\n\t var value = collection[index];\n\t setter(result, value, iteratee(value, index, collection), collection);\n\t }\n\t } else {\n\t baseEach(collection, function(value, key, collection) {\n\t setter(result, value, iteratee(value, key, collection), collection);\n\t });\n\t }\n\t return result;\n\t };\n\t }\n\n\t /**\n\t * Creates a function that assigns properties of source object(s) to a given\n\t * destination object.\n\t *\n\t * @private\n\t * @param {Function} assigner The function to assign values.\n\t * @returns {Function} Returns the new assigner function.\n\t */\n\t function createAssigner(assigner) {\n\t return function() {\n\t var length = arguments.length,\n\t object = arguments[0];\n\n\t if (length < 2 || object == null) {\n\t return object;\n\t }\n\t if (length > 3 && isIterateeCall(arguments[1], arguments[2], arguments[3])) {\n\t length = 2;\n\t }\n\t // Juggle arguments.\n\t if (length > 3 && typeof arguments[length - 2] == 'function') {\n\t var customizer = bindCallback(arguments[--length - 1], arguments[length--], 5);\n\t } else if (length > 2 && typeof arguments[length - 1] == 'function') {\n\t customizer = arguments[--length];\n\t }\n\t var index = 0;\n\t while (++index < length) {\n\t var source = arguments[index];\n\t if (source) {\n\t assigner(object, source, customizer);\n\t }\n\t }\n\t return object;\n\t };\n\t }\n\n\t /**\n\t * Creates a function that wraps `func` and invokes it with the `this`\n\t * binding of `thisArg`.\n\t *\n\t * @private\n\t * @param {Function} func The function to bind.\n\t * @param {*} [thisArg] The `this` binding of `func`.\n\t * @returns {Function} Returns the new bound function.\n\t */\n\t function createBindWrapper(func, thisArg) {\n\t var Ctor = createCtorWrapper(func);\n\n\t function wrapper() {\n\t return (this instanceof wrapper ? Ctor : func).apply(thisArg, arguments);\n\t }\n\t return wrapper;\n\t }\n\n\t /**\n\t * Creates a `Set` cache object to optimize linear searches of large arrays.\n\t *\n\t * @private\n\t * @param {Array} [values] The values to cache.\n\t * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.\n\t */\n\t var createCache = !(nativeCreate && Set) ? constant(null) : function(values) {\n\t return new SetCache(values);\n\t };\n\n\t /**\n\t * Creates a function that produces compound words out of the words in a\n\t * given string.\n\t *\n\t * @private\n\t * @param {Function} callback The function to combine each word.\n\t * @returns {Function} Returns the new compounder function.\n\t */\n\t function createCompounder(callback) {\n\t return function(string) {\n\t var index = -1,\n\t array = words(deburr(string)),\n\t length = array.length,\n\t result = '';\n\n\t while (++index < length) {\n\t result = callback(result, array[index], index);\n\t }\n\t return result;\n\t };\n\t }\n\n\t /**\n\t * Creates a function that produces an instance of `Ctor` regardless of\n\t * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n\t *\n\t * @private\n\t * @param {Function} Ctor The constructor to wrap.\n\t * @returns {Function} Returns the new wrapped function.\n\t */\n\t function createCtorWrapper(Ctor) {\n\t return function() {\n\t var thisBinding = baseCreate(Ctor.prototype),\n\t result = Ctor.apply(thisBinding, arguments);\n\n\t // Mimic the constructor's `return` behavior.\n\t // See https://es5.github.io/#x13.2.2 for more details.\n\t return isObject(result) ? result : thisBinding;\n\t };\n\t }\n\n\t /**\n\t * Creates a function that gets the extremum value of a collection.\n\t *\n\t * @private\n\t * @param {Function} arrayFunc The function to get the extremum value from an array.\n\t * @param {boolean} [isMin] Specify returning the minimum, instead of the maximum,\n\t * extremum value.\n\t * @returns {Function} Returns the new extremum function.\n\t */\n\t function createExtremum(arrayFunc, isMin) {\n\t return function(collection, iteratee, thisArg) {\n\t if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n\t iteratee = null;\n\t }\n\t var func = getCallback(),\n\t noIteratee = iteratee == null;\n\n\t if (!(func === baseCallback && noIteratee)) {\n\t noIteratee = false;\n\t iteratee = func(iteratee, thisArg, 3);\n\t }\n\t if (noIteratee) {\n\t var isArr = isArray(collection);\n\t if (!isArr && isString(collection)) {\n\t iteratee = charAtCallback;\n\t } else {\n\t return arrayFunc(isArr ? collection : toIterable(collection));\n\t }\n\t }\n\t return extremumBy(collection, iteratee, isMin);\n\t };\n\t }\n\n\t /**\n\t * Creates a function that wraps `func` and invokes it with optional `this`\n\t * binding of, partial application, and currying.\n\t *\n\t * @private\n\t * @param {Function|string} func The function or method name to reference.\n\t * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\n\t * @param {*} [thisArg] The `this` binding of `func`.\n\t * @param {Array} [partials] The arguments to prepend to those provided to the new function.\n\t * @param {Array} [holders] The `partials` placeholder indexes.\n\t * @param {Array} [partialsRight] The arguments to append to those provided to the new function.\n\t * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n\t * @param {Array} [argPos] The argument positions of the new function.\n\t * @param {number} [ary] The arity cap of `func`.\n\t * @param {number} [arity] The arity of `func`.\n\t * @returns {Function} Returns the new wrapped function.\n\t */\n\t function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n\t var isAry = bitmask & ARY_FLAG,\n\t isBind = bitmask & BIND_FLAG,\n\t isBindKey = bitmask & BIND_KEY_FLAG,\n\t isCurry = bitmask & CURRY_FLAG,\n\t isCurryBound = bitmask & CURRY_BOUND_FLAG,\n\t isCurryRight = bitmask & CURRY_RIGHT_FLAG;\n\n\t var Ctor = !isBindKey && createCtorWrapper(func),\n\t key = func;\n\n\t function wrapper() {\n\t // Avoid `arguments` object use disqualifying optimizations by\n\t // converting it to an array before providing it to other functions.\n\t var length = arguments.length,\n\t index = length,\n\t args = Array(length);\n\n\t while (index--) {\n\t args[index] = arguments[index];\n\t }\n\t if (partials) {\n\t args = composeArgs(args, partials, holders);\n\t }\n\t if (partialsRight) {\n\t args = composeArgsRight(args, partialsRight, holdersRight);\n\t }\n\t if (isCurry || isCurryRight) {\n\t var placeholder = wrapper.placeholder,\n\t argsHolders = replaceHolders(args, placeholder);\n\n\t length -= argsHolders.length;\n\t if (length < arity) {\n\t var newArgPos = argPos ? arrayCopy(argPos) : null,\n\t newArity = nativeMax(arity - length, 0),\n\t newsHolders = isCurry ? argsHolders : null,\n\t newHoldersRight = isCurry ? null : argsHolders,\n\t newPartials = isCurry ? args : null,\n\t newPartialsRight = isCurry ? null : args;\n\n\t bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n\t bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n\t if (!isCurryBound) {\n\t bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n\t }\n\t var result = createHybridWrapper(func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity);\n\t result.placeholder = placeholder;\n\t return result;\n\t }\n\t }\n\t var thisBinding = isBind ? thisArg : this;\n\t if (isBindKey) {\n\t func = thisBinding[key];\n\t }\n\t if (argPos) {\n\t args = reorder(args, argPos);\n\t }\n\t if (isAry && ary < args.length) {\n\t args.length = ary;\n\t }\n\t return (this instanceof wrapper ? (Ctor || createCtorWrapper(func)) : func).apply(thisBinding, args);\n\t }\n\t return wrapper;\n\t }\n\n\t /**\n\t * Creates the pad required for `string` based on the given padding length.\n\t * The `chars` string may be truncated if the number of padding characters\n\t * exceeds the padding length.\n\t *\n\t * @private\n\t * @param {string} string The string to create padding for.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the pad for `string`.\n\t */\n\t function createPad(string, length, chars) {\n\t var strLength = string.length;\n\t length = +length;\n\n\t if (strLength >= length || !nativeIsFinite(length)) {\n\t return '';\n\t }\n\t var padLength = length - strLength;\n\t chars = chars == null ? ' ' : (chars + '');\n\t return repeat(chars, ceil(padLength / chars.length)).slice(0, padLength);\n\t }\n\n\t /**\n\t * Creates a function that wraps `func` and invokes it with the optional `this`\n\t * binding of `thisArg` and the `partials` prepended to those provided to\n\t * the wrapper.\n\t *\n\t * @private\n\t * @param {Function} func The function to partially apply arguments to.\n\t * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\n\t * @param {*} thisArg The `this` binding of `func`.\n\t * @param {Array} partials The arguments to prepend to those provided to the new function.\n\t * @returns {Function} Returns the new bound function.\n\t */\n\t function createPartialWrapper(func, bitmask, thisArg, partials) {\n\t var isBind = bitmask & BIND_FLAG,\n\t Ctor = createCtorWrapper(func);\n\n\t function wrapper() {\n\t // Avoid `arguments` object use disqualifying optimizations by\n\t // converting it to an array before providing it `func`.\n\t var argsIndex = -1,\n\t argsLength = arguments.length,\n\t leftIndex = -1,\n\t leftLength = partials.length,\n\t args = Array(argsLength + leftLength);\n\n\t while (++leftIndex < leftLength) {\n\t args[leftIndex] = partials[leftIndex];\n\t }\n\t while (argsLength--) {\n\t args[leftIndex++] = arguments[++argsIndex];\n\t }\n\t return (this instanceof wrapper ? Ctor : func).apply(isBind ? thisArg : this, args);\n\t }\n\t return wrapper;\n\t }\n\n\t /**\n\t * Creates a function that either curries or invokes `func` with optional\n\t * `this` binding and partially applied arguments.\n\t *\n\t * @private\n\t * @param {Function|string} func The function or method name to reference.\n\t * @param {number} bitmask The bitmask of flags.\n\t * The bitmask may be composed of the following flags:\n\t * 1 - `_.bind`\n\t * 2 - `_.bindKey`\n\t * 4 - `_.curry` or `_.curryRight` of a bound function\n\t * 8 - `_.curry`\n\t * 16 - `_.curryRight`\n\t * 32 - `_.partial`\n\t * 64 - `_.partialRight`\n\t * 128 - `_.rearg`\n\t * 256 - `_.ary`\n\t * @param {*} [thisArg] The `this` binding of `func`.\n\t * @param {Array} [partials] The arguments to be partially applied.\n\t * @param {Array} [holders] The `partials` placeholder indexes.\n\t * @param {Array} [argPos] The argument positions of the new function.\n\t * @param {number} [ary] The arity cap of `func`.\n\t * @param {number} [arity] The arity of `func`.\n\t * @returns {Function} Returns the new wrapped function.\n\t */\n\t function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n\t var isBindKey = bitmask & BIND_KEY_FLAG;\n\t if (!isBindKey && !isFunction(func)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t var length = partials ? partials.length : 0;\n\t if (!length) {\n\t bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n\t partials = holders = null;\n\t }\n\t length -= (holders ? holders.length : 0);\n\t if (bitmask & PARTIAL_RIGHT_FLAG) {\n\t var partialsRight = partials,\n\t holdersRight = holders;\n\n\t partials = holders = null;\n\t }\n\t var data = !isBindKey && getData(func),\n\t newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n\t if (data && data !== true) {\n\t mergeData(newData, data);\n\t bitmask = newData[1];\n\t arity = newData[9];\n\t }\n\t newData[9] = arity == null\n\t ? (isBindKey ? 0 : func.length)\n\t : (nativeMax(arity - length, 0) || 0);\n\n\t if (bitmask == BIND_FLAG) {\n\t var result = createBindWrapper(newData[0], newData[2]);\n\t } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\n\t result = createPartialWrapper.apply(null, newData);\n\t } else {\n\t result = createHybridWrapper.apply(null, newData);\n\t }\n\t var setter = data ? baseSetData : setData;\n\t return setter(result, newData);\n\t }\n\n\t /**\n\t * A specialized version of `baseIsEqualDeep` for arrays with support for\n\t * partial deep comparisons.\n\t *\n\t * @private\n\t * @param {Array} array The array to compare.\n\t * @param {Array} other The other array to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} [customizer] The function to customize comparing arrays.\n\t * @param {boolean} [isWhere] Specify performing partial comparisons.\n\t * @param {Array} [stackA] Tracks traversed `value` objects.\n\t * @param {Array} [stackB] Tracks traversed `other` objects.\n\t * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n\t */\n\t function equalArrays(array, other, equalFunc, customizer, isWhere, stackA, stackB) {\n\t var index = -1,\n\t arrLength = array.length,\n\t othLength = other.length,\n\t result = true;\n\n\t if (arrLength != othLength && !(isWhere && othLength > arrLength)) {\n\t return false;\n\t }\n\t // Deep compare the contents, ignoring non-numeric properties.\n\t while (result && ++index < arrLength) {\n\t var arrValue = array[index],\n\t othValue = other[index];\n\n\t result = undefined;\n\t if (customizer) {\n\t result = isWhere\n\t ? customizer(othValue, arrValue, index)\n\t : customizer(arrValue, othValue, index);\n\t }\n\t if (typeof result == 'undefined') {\n\t // Recursively compare arrays (susceptible to call stack limits).\n\t if (isWhere) {\n\t var othIndex = othLength;\n\t while (othIndex--) {\n\t othValue = other[othIndex];\n\t result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isWhere, stackA, stackB);\n\t if (result) {\n\t break;\n\t }\n\t }\n\t } else {\n\t result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isWhere, stackA, stackB);\n\t }\n\t }\n\t }\n\t return !!result;\n\t }\n\n\t /**\n\t * A specialized version of `baseIsEqualDeep` for comparing objects of\n\t * the same `toStringTag`.\n\t *\n\t * **Note:** This function only supports comparing values with tags of\n\t * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n\t *\n\t * @private\n\t * @param {Object} value The object to compare.\n\t * @param {Object} other The other object to compare.\n\t * @param {string} tag The `toStringTag` of the objects to compare.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\t function equalByTag(object, other, tag) {\n\t switch (tag) {\n\t case boolTag:\n\t case dateTag:\n\t // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n\t // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n\t return +object == +other;\n\n\t case errorTag:\n\t return object.name == other.name && object.message == other.message;\n\n\t case numberTag:\n\t // Treat `NaN` vs. `NaN` as equal.\n\t return (object != +object)\n\t ? other != +other\n\t // But, treat `-0` vs. `+0` as not equal.\n\t : (object == 0 ? ((1 / object) == (1 / other)) : object == +other);\n\n\t case regexpTag:\n\t case stringTag:\n\t // Coerce regexes to strings and treat strings primitives and string\n\t // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n\t return object == (other + '');\n\t }\n\t return false;\n\t }\n\n\t /**\n\t * A specialized version of `baseIsEqualDeep` for objects with support for\n\t * partial deep comparisons.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare.\n\t * @param {Object} other The other object to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} [customizer] The function to customize comparing values.\n\t * @param {boolean} [isWhere] Specify performing partial comparisons.\n\t * @param {Array} [stackA] Tracks traversed `value` objects.\n\t * @param {Array} [stackB] Tracks traversed `other` objects.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\t function equalObjects(object, other, equalFunc, customizer, isWhere, stackA, stackB) {\n\t var objProps = keys(object),\n\t objLength = objProps.length,\n\t othProps = keys(other),\n\t othLength = othProps.length;\n\n\t if (objLength != othLength && !isWhere) {\n\t return false;\n\t }\n\t var hasCtor,\n\t index = -1;\n\n\t while (++index < objLength) {\n\t var key = objProps[index],\n\t result = hasOwnProperty.call(other, key);\n\n\t if (result) {\n\t var objValue = object[key],\n\t othValue = other[key];\n\n\t result = undefined;\n\t if (customizer) {\n\t result = isWhere\n\t ? customizer(othValue, objValue, key)\n\t : customizer(objValue, othValue, key);\n\t }\n\t if (typeof result == 'undefined') {\n\t // Recursively compare objects (susceptible to call stack limits).\n\t result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isWhere, stackA, stackB);\n\t }\n\t }\n\t if (!result) {\n\t return false;\n\t }\n\t hasCtor || (hasCtor = key == 'constructor');\n\t }\n\t if (!hasCtor) {\n\t var objCtor = object.constructor,\n\t othCtor = other.constructor;\n\n\t // Non `Object` object instances with different constructors are not equal.\n\t if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) &&\n\t !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\n\t /**\n\t * Gets the extremum value of `collection` invoking `iteratee` for each value\n\t * in `collection` to generate the criterion by which the value is ranked.\n\t * The `iteratee` is invoked with three arguments; (value, index, collection).\n\t *\n\t * @private\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @param {boolean} [isMin] Specify returning the minimum, instead of the\n\t * maximum, extremum value.\n\t * @returns {*} Returns the extremum value.\n\t */\n\t function extremumBy(collection, iteratee, isMin) {\n\t var exValue = isMin ? POSITIVE_INFINITY : NEGATIVE_INFINITY,\n\t computed = exValue,\n\t result = computed;\n\n\t baseEach(collection, function(value, index, collection) {\n\t var current = iteratee(value, index, collection);\n\t if ((isMin ? current < computed : current > computed) || (current === exValue && current === result)) {\n\t computed = current;\n\t result = value;\n\t }\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * Gets the appropriate \"callback\" function. If the `_.callback` method is\n\t * customized this function returns the custom method, otherwise it returns\n\t * the `baseCallback` function. If arguments are provided the chosen function\n\t * is invoked with them and its result is returned.\n\t *\n\t * @private\n\t * @returns {Function} Returns the chosen function or its result.\n\t */\n\t function getCallback(func, thisArg, argCount) {\n\t var result = lodash.callback || callback;\n\t result = result === callback ? baseCallback : result;\n\t return argCount ? result(func, thisArg, argCount) : result;\n\t }\n\n\t /**\n\t * Gets metadata for `func`.\n\t *\n\t * @private\n\t * @param {Function} func The function to query.\n\t * @returns {*} Returns the metadata for `func`.\n\t */\n\t var getData = !metaMap ? noop : function(func) {\n\t return metaMap.get(func);\n\t };\n\n\t /**\n\t * Gets the appropriate \"indexOf\" function. If the `_.indexOf` method is\n\t * customized this function returns the custom method, otherwise it returns\n\t * the `baseIndexOf` function. If arguments are provided the chosen function\n\t * is invoked with them and its result is returned.\n\t *\n\t * @private\n\t * @returns {Function|number} Returns the chosen function or its result.\n\t */\n\t function getIndexOf(collection, target, fromIndex) {\n\t var result = lodash.indexOf || indexOf;\n\t result = result === indexOf ? baseIndexOf : result;\n\t return collection ? result(collection, target, fromIndex) : result;\n\t }\n\n\t /**\n\t * Gets the view, applying any `transforms` to the `start` and `end` positions.\n\t *\n\t * @private\n\t * @param {number} start The start of the view.\n\t * @param {number} end The end of the view.\n\t * @param {Array} [transforms] The transformations to apply to the view.\n\t * @returns {Object} Returns an object containing the `start` and `end`\n\t * positions of the view.\n\t */\n\t function getView(start, end, transforms) {\n\t var index = -1,\n\t length = transforms ? transforms.length : 0;\n\n\t while (++index < length) {\n\t var data = transforms[index],\n\t size = data.size;\n\n\t switch (data.type) {\n\t case 'drop': start += size; break;\n\t case 'dropRight': end -= size; break;\n\t case 'take': end = nativeMin(end, start + size); break;\n\t case 'takeRight': start = nativeMax(start, end - size); break;\n\t }\n\t }\n\t return { 'start': start, 'end': end };\n\t }\n\n\t /**\n\t * Initializes an array clone.\n\t *\n\t * @private\n\t * @param {Array} array The array to clone.\n\t * @returns {Array} Returns the initialized clone.\n\t */\n\t function initCloneArray(array) {\n\t var length = array.length,\n\t result = new array.constructor(length);\n\n\t // Add array properties assigned by `RegExp#exec`.\n\t if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n\t result.index = array.index;\n\t result.input = array.input;\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Initializes an object clone.\n\t *\n\t * @private\n\t * @param {Object} object The object to clone.\n\t * @returns {Object} Returns the initialized clone.\n\t */\n\t function initCloneObject(object) {\n\t var Ctor = object.constructor;\n\t if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n\t Ctor = Object;\n\t }\n\t return new Ctor;\n\t }\n\n\t /**\n\t * Initializes an object clone based on its `toStringTag`.\n\t *\n\t * **Note:** This function only supports cloning values with tags of\n\t * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n\t *\n\t *\n\t * @private\n\t * @param {Object} object The object to clone.\n\t * @param {string} tag The `toStringTag` of the object to clone.\n\t * @param {boolean} [isDeep] Specify a deep clone.\n\t * @returns {Object} Returns the initialized clone.\n\t */\n\t function initCloneByTag(object, tag, isDeep) {\n\t var Ctor = object.constructor;\n\t switch (tag) {\n\t case arrayBufferTag:\n\t return bufferClone(object);\n\n\t case boolTag:\n\t case dateTag:\n\t return new Ctor(+object);\n\n\t case float32Tag: case float64Tag:\n\t case int8Tag: case int16Tag: case int32Tag:\n\t case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n\t var buffer = object.buffer;\n\t return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n\t case numberTag:\n\t case stringTag:\n\t return new Ctor(object);\n\n\t case regexpTag:\n\t var result = new Ctor(object.source, reFlags.exec(object));\n\t result.lastIndex = object.lastIndex;\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Checks if `func` is eligible for `this` binding.\n\t *\n\t * @private\n\t * @param {Function} func The function to check.\n\t * @returns {boolean} Returns `true` if `func` is eligible, else `false`.\n\t */\n\t function isBindable(func) {\n\t var support = lodash.support,\n\t result = !(support.funcNames ? func.name : support.funcDecomp);\n\n\t if (!result) {\n\t var source = fnToString.call(func);\n\t if (!support.funcNames) {\n\t result = !reFuncName.test(source);\n\t }\n\t if (!result) {\n\t // Check if `func` references the `this` keyword and store the result.\n\t result = reThis.test(source) || isNative(func);\n\t baseSetData(func, result);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\t function isIndex(value, length) {\n\t value = +value;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\t return value > -1 && value % 1 == 0 && value < length;\n\t }\n\n\t /**\n\t * Checks if the provided arguments are from an iteratee call.\n\t *\n\t * @private\n\t * @param {*} value The potential iteratee value argument.\n\t * @param {*} index The potential iteratee index or key argument.\n\t * @param {*} object The potential iteratee object argument.\n\t * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n\t */\n\t function isIterateeCall(value, index, object) {\n\t if (!isObject(object)) {\n\t return false;\n\t }\n\t var type = typeof index;\n\t if (type == 'number') {\n\t var length = object.length,\n\t prereq = isLength(length) && isIndex(index, length);\n\t } else {\n\t prereq = type == 'string' && index in object;\n\t }\n\t return prereq && object[index] === value;\n\t }\n\n\t /**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on ES `ToLength`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength)\n\t * for more details.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\t function isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t }\n\n\t /**\n\t * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` if suitable for strict\n\t * equality comparisons, else `false`.\n\t */\n\t function isStrictComparable(value) {\n\t return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value));\n\t }\n\n\t /**\n\t * Merges the function metadata of `source` into `data`.\n\t *\n\t * Merging metadata reduces the number of wrappers required to invoke a function.\n\t * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n\t * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`\n\t * augment function arguments, making the order in which they are executed important,\n\t * preventing the merging of metadata. However, we make an exception for a safe\n\t * common case where curried functions have `_.ary` and or `_.rearg` applied.\n\t *\n\t * @private\n\t * @param {Array} data The destination metadata.\n\t * @param {Array} source The source metadata.\n\t * @returns {Array} Returns `data`.\n\t */\n\t function mergeData(data, source) {\n\t var bitmask = data[1],\n\t srcBitmask = source[1],\n\t newBitmask = bitmask | srcBitmask;\n\n\t var arityFlags = ARY_FLAG | REARG_FLAG,\n\t bindFlags = BIND_FLAG | BIND_KEY_FLAG,\n\t comboFlags = arityFlags | bindFlags | CURRY_BOUND_FLAG | CURRY_RIGHT_FLAG;\n\n\t var isAry = bitmask & ARY_FLAG && !(srcBitmask & ARY_FLAG),\n\t isRearg = bitmask & REARG_FLAG && !(srcBitmask & REARG_FLAG),\n\t argPos = (isRearg ? data : source)[7],\n\t ary = (isAry ? data : source)[8];\n\n\t var isCommon = !(bitmask >= REARG_FLAG && srcBitmask > bindFlags) &&\n\t !(bitmask > bindFlags && srcBitmask >= REARG_FLAG);\n\n\t var isCombo = (newBitmask >= arityFlags && newBitmask <= comboFlags) &&\n\t (bitmask < REARG_FLAG || ((isRearg || isAry) && argPos.length <= ary));\n\n\t // Exit early if metadata can't be merged.\n\t if (!(isCommon || isCombo)) {\n\t return data;\n\t }\n\t // Use source `thisArg` if available.\n\t if (srcBitmask & BIND_FLAG) {\n\t data[2] = source[2];\n\t // Set when currying a bound function.\n\t newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\n\t }\n\t // Compose partial arguments.\n\t var value = source[3];\n\t if (value) {\n\t var partials = data[3];\n\t data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\n\t data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\n\t }\n\t // Compose partial right arguments.\n\t value = source[5];\n\t if (value) {\n\t partials = data[5];\n\t data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\n\t data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\n\t }\n\t // Use source `argPos` if available.\n\t value = source[7];\n\t if (value) {\n\t data[7] = arrayCopy(value);\n\t }\n\t // Use source `ary` if it's smaller.\n\t if (srcBitmask & ARY_FLAG) {\n\t data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n\t }\n\t // Use source `arity` if one is not provided.\n\t if (data[9] == null) {\n\t data[9] = source[9];\n\t }\n\t // Use source `func` and merge bitmasks.\n\t data[0] = source[0];\n\t data[1] = newBitmask;\n\n\t return data;\n\t }\n\n\t /**\n\t * A specialized version of `_.pick` that picks `object` properties specified\n\t * by the `props` array.\n\t *\n\t * @private\n\t * @param {Object} object The source object.\n\t * @param {string[]} props The property names to pick.\n\t * @returns {Object} Returns the new object.\n\t */\n\t function pickByArray(object, props) {\n\t object = toObject(object);\n\n\t var index = -1,\n\t length = props.length,\n\t result = {};\n\n\t while (++index < length) {\n\t var key = props[index];\n\t if (key in object) {\n\t result[key] = object[key];\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * A specialized version of `_.pick` that picks `object` properties `predicate`\n\t * returns truthy for.\n\t *\n\t * @private\n\t * @param {Object} object The source object.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {Object} Returns the new object.\n\t */\n\t function pickByCallback(object, predicate) {\n\t var result = {};\n\t baseForIn(object, function(value, key, object) {\n\t if (predicate(value, key, object)) {\n\t result[key] = value;\n\t }\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * Reorder `array` according to the specified indexes where the element at\n\t * the first index is assigned as the first element, the element at\n\t * the second index is assigned as the second element, and so on.\n\t *\n\t * @private\n\t * @param {Array} array The array to reorder.\n\t * @param {Array} indexes The arranged array indexes.\n\t * @returns {Array} Returns `array`.\n\t */\n\t function reorder(array, indexes) {\n\t var arrLength = array.length,\n\t length = nativeMin(indexes.length, arrLength),\n\t oldArray = arrayCopy(array);\n\n\t while (length--) {\n\t var index = indexes[length];\n\t array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n\t }\n\t return array;\n\t }\n\n\t /**\n\t * Sets metadata for `func`.\n\t *\n\t * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n\t * period of time, it will trip its breaker and transition to an identity function\n\t * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)\n\t * for more details.\n\t *\n\t * @private\n\t * @param {Function} func The function to associate metadata with.\n\t * @param {*} data The metadata.\n\t * @returns {Function} Returns `func`.\n\t */\n\t var setData = (function() {\n\t var count = 0,\n\t lastCalled = 0;\n\n\t return function(key, value) {\n\t var stamp = now(),\n\t remaining = HOT_SPAN - (stamp - lastCalled);\n\n\t lastCalled = stamp;\n\t if (remaining > 0) {\n\t if (++count >= HOT_COUNT) {\n\t return key;\n\t }\n\t } else {\n\t count = 0;\n\t }\n\t return baseSetData(key, value);\n\t };\n\t }());\n\n\t /**\n\t * A fallback implementation of `_.isPlainObject` which checks if `value`\n\t * is an object created by the `Object` constructor or has a `[[Prototype]]`\n\t * of `null`.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n\t */\n\t function shimIsPlainObject(value) {\n\t var Ctor,\n\t support = lodash.support;\n\n\t // Exit early for non `Object` objects.\n\t if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||\n\t (!hasOwnProperty.call(value, 'constructor') &&\n\t (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n\t return false;\n\t }\n\t // IE < 9 iterates inherited properties before own properties. If the first\n\t // iterated property is an object's own property then there are no inherited\n\t // enumerable properties.\n\t var result;\n\t // In most environments an object's own properties are iterated before\n\t // its inherited properties. If the last iterated property is an object's\n\t // own property then there are no inherited enumerable properties.\n\t baseForIn(value, function(subValue, key) {\n\t result = key;\n\t });\n\t return typeof result == 'undefined' || hasOwnProperty.call(value, result);\n\t }\n\n\t /**\n\t * A fallback implementation of `Object.keys` which creates an array of the\n\t * own enumerable property names of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the array of property names.\n\t */\n\t function shimKeys(object) {\n\t var props = keysIn(object),\n\t propsLength = props.length,\n\t length = propsLength && object.length,\n\t support = lodash.support;\n\n\t var allowIndexes = length && isLength(length) &&\n\t (isArray(object) || (support.nonEnumArgs && isArguments(object)));\n\n\t var index = -1,\n\t result = [];\n\n\t while (++index < propsLength) {\n\t var key = props[index];\n\t if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Converts `value` to an array-like object if it is not one.\n\t *\n\t * @private\n\t * @param {*} value The value to process.\n\t * @returns {Array|Object} Returns the array-like object.\n\t */\n\t function toIterable(value) {\n\t if (value == null) {\n\t return [];\n\t }\n\t if (!isLength(value.length)) {\n\t return values(value);\n\t }\n\t return isObject(value) ? value : Object(value);\n\t }\n\n\t /**\n\t * Converts `value` to an object if it is not one.\n\t *\n\t * @private\n\t * @param {*} value The value to process.\n\t * @returns {Object} Returns the object.\n\t */\n\t function toObject(value) {\n\t return isObject(value) ? value : Object(value);\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates an array of elements split into groups the length of `size`.\n\t * If `collection` can't be split evenly, the final chunk will be the remaining\n\t * elements.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to process.\n\t * @param {numer} [size=1] The length of each chunk.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Array} Returns the new array containing chunks.\n\t * @example\n\t *\n\t * _.chunk(['a', 'b', 'c', 'd'], 2);\n\t * // => [['a', 'b'], ['c', 'd']]\n\t *\n\t * _.chunk(['a', 'b', 'c', 'd'], 3);\n\t * // => [['a', 'b', 'c'], ['d']]\n\t */\n\t function chunk(array, size, guard) {\n\t if (guard ? isIterateeCall(array, size, guard) : size == null) {\n\t size = 1;\n\t } else {\n\t size = nativeMax(+size || 1, 1);\n\t }\n\t var index = 0,\n\t length = array ? array.length : 0,\n\t resIndex = -1,\n\t result = Array(ceil(length / size));\n\n\t while (index < length) {\n\t result[++resIndex] = baseSlice(array, index, (index += size));\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates an array with all falsey values removed. The values `false`, `null`,\n\t * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to compact.\n\t * @returns {Array} Returns the new array of filtered values.\n\t * @example\n\t *\n\t * _.compact([0, 1, false, 2, '', 3]);\n\t * // => [1, 2, 3]\n\t */\n\t function compact(array) {\n\t var index = -1,\n\t length = array ? array.length : 0,\n\t resIndex = -1,\n\t result = [];\n\n\t while (++index < length) {\n\t var value = array[index];\n\t if (value) {\n\t result[++resIndex] = value;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates an array excluding all values of the provided arrays using\n\t * `SameValueZero` for equality comparisons.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to inspect.\n\t * @param {...Array} [values] The arrays of values to exclude.\n\t * @returns {Array} Returns the new array of filtered values.\n\t * @example\n\t *\n\t * _.difference([1, 2, 3], [5, 2, 10]);\n\t * // => [1, 3]\n\t */\n\t function difference() {\n\t var index = -1,\n\t length = arguments.length;\n\n\t while (++index < length) {\n\t var value = arguments[index];\n\t if (isArray(value) || isArguments(value)) {\n\t break;\n\t }\n\t }\n\t return baseDifference(value, baseFlatten(arguments, false, true, ++index));\n\t }\n\n\t /**\n\t * Creates a slice of `array` with `n` elements dropped from the beginning.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {number} [n=1] The number of elements to drop.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.drop([1, 2, 3]);\n\t * // => [2, 3]\n\t *\n\t * _.drop([1, 2, 3], 2);\n\t * // => [3]\n\t *\n\t * _.drop([1, 2, 3], 5);\n\t * // => []\n\t *\n\t * _.drop([1, 2, 3], 0);\n\t * // => [1, 2, 3]\n\t */\n\t function drop(array, n, guard) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t if (guard ? isIterateeCall(array, n, guard) : n == null) {\n\t n = 1;\n\t }\n\t return baseSlice(array, n < 0 ? 0 : n);\n\t }\n\n\t /**\n\t * Creates a slice of `array` with `n` elements dropped from the end.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {number} [n=1] The number of elements to drop.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.dropRight([1, 2, 3]);\n\t * // => [1, 2]\n\t *\n\t * _.dropRight([1, 2, 3], 2);\n\t * // => [1]\n\t *\n\t * _.dropRight([1, 2, 3], 5);\n\t * // => []\n\t *\n\t * _.dropRight([1, 2, 3], 0);\n\t * // => [1, 2, 3]\n\t */\n\t function dropRight(array, n, guard) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t if (guard ? isIterateeCall(array, n, guard) : n == null) {\n\t n = 1;\n\t }\n\t n = length - (+n || 0);\n\t return baseSlice(array, 0, n < 0 ? 0 : n);\n\t }\n\n\t /**\n\t * Creates a slice of `array` excluding elements dropped from the end.\n\t * Elements are dropped until `predicate` returns falsey. The predicate is\n\t * bound to `thisArg` and invoked with three arguments; (value, index, array).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per element.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.dropRightWhile([1, 2, 3], function(n) { return n > 1; });\n\t * // => [1]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'status': 'busy', 'active': false },\n\t * { 'user': 'fred', 'status': 'busy', 'active': true },\n\t * { 'user': 'pebbles', 'status': 'away', 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.dropRightWhile(users, 'active'), 'user');\n\t * // => ['barney']\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.pluck(_.dropRightWhile(users, { 'status': 'away' }), 'user');\n\t * // => ['barney', 'fred']\n\t */\n\t function dropRightWhile(array, predicate, thisArg) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (length-- && predicate(array[length], length, array)) {}\n\t return baseSlice(array, 0, length + 1);\n\t }\n\n\t /**\n\t * Creates a slice of `array` excluding elements dropped from the beginning.\n\t * Elements are dropped until `predicate` returns falsey. The predicate is\n\t * bound to `thisArg` and invoked with three arguments; (value, index, array).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per element.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.dropWhile([1, 2, 3], function(n) { return n < 3; });\n\t * // => [3]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'status': 'busy', 'active': true },\n\t * { 'user': 'fred', 'status': 'busy', 'active': false },\n\t * { 'user': 'pebbles', 'status': 'away', 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.dropWhile(users, 'active'), 'user');\n\t * // => ['fred', 'pebbles']\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.pluck(_.dropWhile(users, { 'status': 'busy' }), 'user');\n\t * // => ['pebbles']\n\t */\n\t function dropWhile(array, predicate, thisArg) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t var index = -1;\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (++index < length && predicate(array[index], index, array)) {}\n\t return baseSlice(array, index);\n\t }\n\n\t /**\n\t * This method is like `_.find` except that it returns the index of the first\n\t * element `predicate` returns truthy for, instead of the element itself.\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to search.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {number} Returns the index of the found element, else `-1`.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': false },\n\t * { 'user': 'fred', 'age': 40, 'active': true },\n\t * { 'user': 'pebbles', 'age': 1, 'active': false }\n\t * ];\n\t *\n\t * _.findIndex(users, function(chr) { return chr.age < 40; });\n\t * // => 0\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.findIndex(users, { 'age': 1 });\n\t * // => 2\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.findIndex(users, 'active');\n\t * // => 1\n\t */\n\t function findIndex(array, predicate, thisArg) {\n\t var index = -1,\n\t length = array ? array.length : 0;\n\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (++index < length) {\n\t if (predicate(array[index], index, array)) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t }\n\n\t /**\n\t * This method is like `_.findIndex` except that it iterates over elements\n\t * of `collection` from right to left.\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to search.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {number} Returns the index of the found element, else `-1`.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': true },\n\t * { 'user': 'fred', 'age': 40, 'active': false },\n\t * { 'user': 'pebbles', 'age': 1, 'active': false }\n\t * ];\n\t *\n\t * _.findLastIndex(users, function(chr) { return chr.age < 40; });\n\t * // => 2\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.findLastIndex(users, { 'age': 40 });\n\t * // => 1\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.findLastIndex(users, 'active');\n\t * // => 0\n\t */\n\t function findLastIndex(array, predicate, thisArg) {\n\t var length = array ? array.length : 0;\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (length--) {\n\t if (predicate(array[length], length, array)) {\n\t return length;\n\t }\n\t }\n\t return -1;\n\t }\n\n\t /**\n\t * Gets the first element of `array`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias head\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @returns {*} Returns the first element of `array`.\n\t * @example\n\t *\n\t * _.first([1, 2, 3]);\n\t * // => 1\n\t *\n\t * _.first([]);\n\t * // => undefined\n\t */\n\t function first(array) {\n\t return array ? array[0] : undefined;\n\t }\n\n\t /**\n\t * Flattens a nested array. If `isDeep` is `true` the array is recursively\n\t * flattened, otherwise it is only flattened a single level.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to flatten.\n\t * @param {boolean} [isDeep] Specify a deep flatten.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Array} Returns the new flattened array.\n\t * @example\n\t *\n\t * _.flatten([1, [2], [3, [[4]]]]);\n\t * // => [1, 2, 3, [[4]]];\n\t *\n\t * // using `isDeep`\n\t * _.flatten([1, [2], [3, [[4]]]], true);\n\t * // => [1, 2, 3, 4];\n\t */\n\t function flatten(array, isDeep, guard) {\n\t var length = array ? array.length : 0;\n\t if (guard && isIterateeCall(array, isDeep, guard)) {\n\t isDeep = false;\n\t }\n\t return length ? baseFlatten(array, isDeep) : [];\n\t }\n\n\t /**\n\t * Recursively flattens a nested array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to recursively flatten.\n\t * @returns {Array} Returns the new flattened array.\n\t * @example\n\t *\n\t * _.flattenDeep([1, [2], [3, [[4]]]]);\n\t * // => [1, 2, 3, 4];\n\t */\n\t function flattenDeep(array) {\n\t var length = array ? array.length : 0;\n\t return length ? baseFlatten(array, true) : [];\n\t }\n\n\t /**\n\t * Gets the index at which the first occurrence of `value` is found in `array`\n\t * using `SameValueZero` for equality comparisons. If `fromIndex` is negative,\n\t * it is used as the offset from the end of `array`. If `array` is sorted\n\t * providing `true` for `fromIndex` performs a faster binary search.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to search.\n\t * @param {*} value The value to search for.\n\t * @param {boolean|number} [fromIndex=0] The index to search from or `true`\n\t * to perform a binary search on a sorted array.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t * @example\n\t *\n\t * _.indexOf([1, 2, 3, 1, 2, 3], 2);\n\t * // => 1\n\t *\n\t * // using `fromIndex`\n\t * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);\n\t * // => 4\n\t *\n\t * // performing a binary search\n\t * _.indexOf([4, 4, 5, 5, 6, 6], 5, true);\n\t * // => 2\n\t */\n\t function indexOf(array, value, fromIndex) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return -1;\n\t }\n\t if (typeof fromIndex == 'number') {\n\t fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n\t } else if (fromIndex) {\n\t var index = binaryIndex(array, value),\n\t other = array[index];\n\n\t return (value === value ? value === other : other !== other) ? index : -1;\n\t }\n\t return baseIndexOf(array, value, fromIndex);\n\t }\n\n\t /**\n\t * Gets all but the last element of `array`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.initial([1, 2, 3]);\n\t * // => [1, 2]\n\t */\n\t function initial(array) {\n\t return dropRight(array, 1);\n\t }\n\n\t /**\n\t * Creates an array of unique values in all provided arrays using `SameValueZero`\n\t * for equality comparisons.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {...Array} [arrays] The arrays to inspect.\n\t * @returns {Array} Returns the new array of shared values.\n\t * @example\n\t *\n\t * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n\t * // => [1, 2]\n\t */\n\t function intersection() {\n\t var args = [],\n\t argsIndex = -1,\n\t argsLength = arguments.length,\n\t caches = [],\n\t indexOf = getIndexOf(),\n\t isCommon = indexOf == baseIndexOf;\n\n\t while (++argsIndex < argsLength) {\n\t var value = arguments[argsIndex];\n\t if (isArray(value) || isArguments(value)) {\n\t args.push(value);\n\t caches.push(isCommon && value.length >= 120 && createCache(argsIndex && value));\n\t }\n\t }\n\t argsLength = args.length;\n\t var array = args[0],\n\t index = -1,\n\t length = array ? array.length : 0,\n\t result = [],\n\t seen = caches[0];\n\n\t outer:\n\t while (++index < length) {\n\t value = array[index];\n\t if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value)) < 0) {\n\t argsIndex = argsLength;\n\t while (--argsIndex) {\n\t var cache = caches[argsIndex];\n\t if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {\n\t continue outer;\n\t }\n\t }\n\t if (seen) {\n\t seen.push(value);\n\t }\n\t result.push(value);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Gets the last element of `array`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @returns {*} Returns the last element of `array`.\n\t * @example\n\t *\n\t * _.last([1, 2, 3]);\n\t * // => 3\n\t */\n\t function last(array) {\n\t var length = array ? array.length : 0;\n\t return length ? array[length - 1] : undefined;\n\t }\n\n\t /**\n\t * This method is like `_.indexOf` except that it iterates over elements of\n\t * `array` from right to left.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to search.\n\t * @param {*} value The value to search for.\n\t * @param {boolean|number} [fromIndex=array.length-1] The index to search from\n\t * or `true` to perform a binary search on a sorted array.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t * @example\n\t *\n\t * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);\n\t * // => 4\n\t *\n\t * // using `fromIndex`\n\t * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);\n\t * // => 1\n\t *\n\t * // performing a binary search\n\t * _.lastIndexOf([4, 4, 5, 5, 6, 6], 5, true);\n\t * // => 3\n\t */\n\t function lastIndexOf(array, value, fromIndex) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return -1;\n\t }\n\t var index = length;\n\t if (typeof fromIndex == 'number') {\n\t index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\n\t } else if (fromIndex) {\n\t index = binaryIndex(array, value, true) - 1;\n\t var other = array[index];\n\t return (value === value ? value === other : other !== other) ? index : -1;\n\t }\n\t if (value !== value) {\n\t return indexOfNaN(array, index, true);\n\t }\n\t while (index--) {\n\t if (array[index] === value) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t }\n\n\t /**\n\t * Removes all provided values from `array` using `SameValueZero` for equality\n\t * comparisons.\n\t *\n\t * **Notes:**\n\t * - Unlike `_.without`, this method mutates `array`.\n\t * - `SameValueZero` comparisons are like strict equality comparisons, e.g. `===`,\n\t * except that `NaN` matches `NaN`. See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to modify.\n\t * @param {...*} [values] The values to remove.\n\t * @returns {Array} Returns `array`.\n\t * @example\n\t *\n\t * var array = [1, 2, 3, 1, 2, 3];\n\t * _.pull(array, 2, 3);\n\t * console.log(array);\n\t * // => [1, 1]\n\t */\n\t function pull() {\n\t var array = arguments[0];\n\t if (!(array && array.length)) {\n\t return array;\n\t }\n\t var index = 0,\n\t indexOf = getIndexOf(),\n\t length = arguments.length;\n\n\t while (++index < length) {\n\t var fromIndex = 0,\n\t value = arguments[index];\n\n\t while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\n\t splice.call(array, fromIndex, 1);\n\t }\n\t }\n\t return array;\n\t }\n\n\t /**\n\t * Removes elements from `array` corresponding to the given indexes and returns\n\t * an array of the removed elements. Indexes may be specified as an array of\n\t * indexes or as individual arguments.\n\t *\n\t * **Note:** Unlike `_.at`, this method mutates `array`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to modify.\n\t * @param {...(number|number[])} [indexes] The indexes of elements to remove,\n\t * specified as individual indexes or arrays of indexes.\n\t * @returns {Array} Returns the new array of removed elements.\n\t * @example\n\t *\n\t * var array = [5, 10, 15, 20];\n\t * var evens = _.pullAt(array, [1, 3]);\n\t *\n\t * console.log(array);\n\t * // => [5, 15]\n\t *\n\t * console.log(evens);\n\t * // => [10, 20]\n\t */\n\t function pullAt(array) {\n\t return basePullAt(array || [], baseFlatten(arguments, false, false, 1));\n\t }\n\n\t /**\n\t * Removes all elements from `array` that `predicate` returns truthy for\n\t * and returns an array of the removed elements. The predicate is bound to\n\t * `thisArg` and invoked with three arguments; (value, index, array).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * **Note:** Unlike `_.filter`, this method mutates `array`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to modify.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the new array of removed elements.\n\t * @example\n\t *\n\t * var array = [1, 2, 3, 4];\n\t * var evens = _.remove(array, function(n) { return n % 2 == 0; });\n\t *\n\t * console.log(array);\n\t * // => [1, 3]\n\t *\n\t * console.log(evens);\n\t * // => [2, 4]\n\t */\n\t function remove(array, predicate, thisArg) {\n\t var index = -1,\n\t length = array ? array.length : 0,\n\t result = [];\n\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (++index < length) {\n\t var value = array[index];\n\t if (predicate(value, index, array)) {\n\t result.push(value);\n\t splice.call(array, index--, 1);\n\t length--;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Gets all but the first element of `array`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias tail\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.rest([1, 2, 3]);\n\t * // => [2, 3]\n\t */\n\t function rest(array) {\n\t return drop(array, 1);\n\t }\n\n\t /**\n\t * Creates a slice of `array` from `start` up to, but not including, `end`.\n\t *\n\t * **Note:** This function is used instead of `Array#slice` to support node\n\t * lists in IE < 9 and to ensure dense arrays are returned.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to slice.\n\t * @param {number} [start=0] The start position.\n\t * @param {number} [end=array.length] The end position.\n\t * @returns {Array} Returns the slice of `array`.\n\t */\n\t function slice(array, start, end) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n\t start = 0;\n\t end = length;\n\t }\n\t return baseSlice(array, start, end);\n\t }\n\n\t /**\n\t * Uses a binary search to determine the lowest index at which `value` should\n\t * be inserted into `array` in order to maintain its sort order. If an iteratee\n\t * function is provided it is invoked for `value` and each element of `array`\n\t * to compute their sort ranking. The iteratee is bound to `thisArg` and\n\t * invoked with one argument; (value).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The sorted array to inspect.\n\t * @param {*} value The value to evaluate.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {number} Returns the index at which `value` should be inserted\n\t * into `array`.\n\t * @example\n\t *\n\t * _.sortedIndex([30, 50], 40);\n\t * // => 1\n\t *\n\t * _.sortedIndex([4, 4, 5, 5, 6, 6], 5);\n\t * // => 2\n\t *\n\t * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };\n\t *\n\t * // using an iteratee function\n\t * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {\n\t * return this.data[word];\n\t * }, dict);\n\t * // => 1\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\n\t * // => 1\n\t */\n\t function sortedIndex(array, value, iteratee, thisArg) {\n\t var func = getCallback(iteratee);\n\t return (func === baseCallback && iteratee == null)\n\t ? binaryIndex(array, value)\n\t : binaryIndexBy(array, value, func(iteratee, thisArg, 1));\n\t }\n\n\t /**\n\t * This method is like `_.sortedIndex` except that it returns the highest\n\t * index at which `value` should be inserted into `array` in order to\n\t * maintain its sort order.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The sorted array to inspect.\n\t * @param {*} value The value to evaluate.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {number} Returns the index at which `value` should be inserted\n\t * into `array`.\n\t * @example\n\t *\n\t * _.sortedLastIndex([4, 4, 5, 5, 6, 6], 5);\n\t * // => 4\n\t */\n\t function sortedLastIndex(array, value, iteratee, thisArg) {\n\t var func = getCallback(iteratee);\n\t return (func === baseCallback && iteratee == null)\n\t ? binaryIndex(array, value, true)\n\t : binaryIndexBy(array, value, func(iteratee, thisArg, 1), true);\n\t }\n\n\t /**\n\t * Creates a slice of `array` with `n` elements taken from the beginning.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {number} [n=1] The number of elements to take.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.take([1, 2, 3]);\n\t * // => [1]\n\t *\n\t * _.take([1, 2, 3], 2);\n\t * // => [1, 2]\n\t *\n\t * _.take([1, 2, 3], 5);\n\t * // => [1, 2, 3]\n\t *\n\t * _.take([1, 2, 3], 0);\n\t * // => []\n\t */\n\t function take(array, n, guard) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t if (guard ? isIterateeCall(array, n, guard) : n == null) {\n\t n = 1;\n\t }\n\t return baseSlice(array, 0, n < 0 ? 0 : n);\n\t }\n\n\t /**\n\t * Creates a slice of `array` with `n` elements taken from the end.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {number} [n=1] The number of elements to take.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.takeRight([1, 2, 3]);\n\t * // => [3]\n\t *\n\t * _.takeRight([1, 2, 3], 2);\n\t * // => [2, 3]\n\t *\n\t * _.takeRight([1, 2, 3], 5);\n\t * // => [1, 2, 3]\n\t *\n\t * _.takeRight([1, 2, 3], 0);\n\t * // => []\n\t */\n\t function takeRight(array, n, guard) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t if (guard ? isIterateeCall(array, n, guard) : n == null) {\n\t n = 1;\n\t }\n\t n = length - (+n || 0);\n\t return baseSlice(array, n < 0 ? 0 : n);\n\t }\n\n\t /**\n\t * Creates a slice of `array` with elements taken from the end. Elements are\n\t * taken until `predicate` returns falsey. The predicate is bound to `thisArg`\n\t * and invoked with three arguments; (value, index, array).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per element.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.takeRightWhile([1, 2, 3], function(n) { return n > 1; });\n\t * // => [2, 3]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'status': 'busy', 'active': false },\n\t * { 'user': 'fred', 'status': 'busy', 'active': true },\n\t * { 'user': 'pebbles', 'status': 'away', 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.takeRightWhile(users, 'active'), 'user');\n\t * // => ['fred', 'pebbles']\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.pluck(_.takeRightWhile(users, { 'status': 'away' }), 'user');\n\t * // => ['pebbles']\n\t */\n\t function takeRightWhile(array, predicate, thisArg) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (length-- && predicate(array[length], length, array)) {}\n\t return baseSlice(array, length + 1);\n\t }\n\n\t /**\n\t * Creates a slice of `array` with elements taken from the beginning. Elements\n\t * are taken until `predicate` returns falsey. The predicate is bound to\n\t * `thisArg` and invoked with three arguments; (value, index, array).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Array\n\t * @param {Array} array The array to query.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per element.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the slice of `array`.\n\t * @example\n\t *\n\t * _.takeWhile([1, 2, 3], function(n) { return n < 3; });\n\t * // => [1, 2]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'status': 'busy', 'active': true },\n\t * { 'user': 'fred', 'status': 'busy', 'active': false },\n\t * { 'user': 'pebbles', 'status': 'away', 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.takeWhile(users, 'active'), 'user');\n\t * // => ['barney']\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.pluck(_.takeWhile(users, { 'status': 'busy' }), 'user');\n\t * // => ['barney', 'fred']\n\t */\n\t function takeWhile(array, predicate, thisArg) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t var index = -1;\n\t predicate = getCallback(predicate, thisArg, 3);\n\t while (++index < length && predicate(array[index], index, array)) {}\n\t return baseSlice(array, 0, index);\n\t }\n\n\t /**\n\t * Creates an array of unique values, in order, of the provided arrays using\n\t * `SameValueZero` for equality comparisons.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {...Array} [arrays] The arrays to inspect.\n\t * @returns {Array} Returns the new array of combined values.\n\t * @example\n\t *\n\t * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n\t * // => [1, 2, 3, 5, 4]\n\t */\n\t function union() {\n\t return baseUniq(baseFlatten(arguments, false, true));\n\t }\n\n\t /**\n\t * Creates a duplicate-value-free version of an array using `SameValueZero`\n\t * for equality comparisons. Providing `true` for `isSorted` performs a faster\n\t * search algorithm for sorted arrays. If an iteratee function is provided it\n\t * is invoked for each value in the array to generate the criterion by which\n\t * uniqueness is computed. The `iteratee` is bound to `thisArg` and invoked\n\t * with three arguments; (value, index, array).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias unique\n\t * @category Array\n\t * @param {Array} array The array to inspect.\n\t * @param {boolean} [isSorted] Specify the array is sorted.\n\t * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n\t * If a property name or object is provided it is used to create a \"_.property\"\n\t * or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Array} Returns the new duplicate-value-free array.\n\t * @example\n\t *\n\t * _.uniq([1, 2, 1]);\n\t * // => [1, 2]\n\t *\n\t * // using `isSorted`\n\t * _.uniq([1, 1, 2], true);\n\t * // => [1, 2]\n\t *\n\t * // using an iteratee function\n\t * _.uniq([1, 2.5, 1.5, 2], function(n) { return this.floor(n); }, Math);\n\t * // => [1, 2.5]\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n\t * // => [{ 'x': 1 }, { 'x': 2 }]\n\t */\n\t function uniq(array, isSorted, iteratee, thisArg) {\n\t var length = array ? array.length : 0;\n\t if (!length) {\n\t return [];\n\t }\n\t // Juggle arguments.\n\t if (typeof isSorted != 'boolean' && isSorted != null) {\n\t thisArg = iteratee;\n\t iteratee = isIterateeCall(array, isSorted, thisArg) ? null : isSorted;\n\t isSorted = false;\n\t }\n\t var func = getCallback();\n\t if (!(func === baseCallback && iteratee == null)) {\n\t iteratee = func(iteratee, thisArg, 3);\n\t }\n\t return (isSorted && getIndexOf() == baseIndexOf)\n\t ? sortedUniq(array, iteratee)\n\t : baseUniq(array, iteratee);\n\t }\n\n\t /**\n\t * This method is like `_.zip` except that it accepts an array of grouped\n\t * elements and creates an array regrouping the elements to their pre-`_.zip`\n\t * configuration.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array of grouped elements to process.\n\t * @returns {Array} Returns the new array of regrouped elements.\n\t * @example\n\t *\n\t * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);\n\t * // => [['fred', 30, true], ['barney', 40, false]]\n\t *\n\t * _.unzip(zipped);\n\t * // => [['fred', 'barney'], [30, 40], [true, false]]\n\t */\n\t function unzip(array) {\n\t var index = -1,\n\t length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t result[index] = arrayMap(array, baseProperty(index));\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates an array excluding all provided values using `SameValueZero` for\n\t * equality comparisons.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {Array} array The array to filter.\n\t * @param {...*} [values] The values to exclude.\n\t * @returns {Array} Returns the new array of filtered values.\n\t * @example\n\t *\n\t * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);\n\t * // => [2, 3, 4]\n\t */\n\t function without(array) {\n\t return baseDifference(array, baseSlice(arguments, 1));\n\t }\n\n\t /**\n\t * Creates an array that is the symmetric difference of the provided arrays.\n\t * See [Wikipedia](https://en.wikipedia.org/wiki/Symmetric_difference) for\n\t * more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {...Array} [arrays] The arrays to inspect.\n\t * @returns {Array} Returns the new array of values.\n\t * @example\n\t *\n\t * _.xor([1, 2, 3], [5, 2, 1, 4]);\n\t * // => [3, 5, 4]\n\t *\n\t * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);\n\t * // => [1, 4, 5]\n\t */\n\t function xor() {\n\t var index = -1,\n\t length = arguments.length;\n\n\t while (++index < length) {\n\t var array = arguments[index];\n\t if (isArray(array) || isArguments(array)) {\n\t var result = result\n\t ? baseDifference(result, array).concat(baseDifference(array, result))\n\t : array;\n\t }\n\t }\n\t return result ? baseUniq(result) : [];\n\t }\n\n\t /**\n\t * Creates an array of grouped elements, the first of which contains the first\n\t * elements of the given arrays, the second of which contains the second elements\n\t * of the given arrays, and so on.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Array\n\t * @param {...Array} [arrays] The arrays to process.\n\t * @returns {Array} Returns the new array of grouped elements.\n\t * @example\n\t *\n\t * _.zip(['fred', 'barney'], [30, 40], [true, false]);\n\t * // => [['fred', 30, true], ['barney', 40, false]]\n\t */\n\t function zip() {\n\t var length = arguments.length,\n\t array = Array(length);\n\n\t while (length--) {\n\t array[length] = arguments[length];\n\t }\n\t return unzip(array);\n\t }\n\n\t /**\n\t * Creates an object composed from arrays of property names and values. Provide\n\t * either a single two dimensional array, e.g. `[[key1, value1], [key2, value2]]`\n\t * or two arrays, one of property names and one of corresponding values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias object\n\t * @category Array\n\t * @param {Array} props The property names.\n\t * @param {Array} [values=[]] The property values.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * _.zipObject(['fred', 'barney'], [30, 40]);\n\t * // => { 'fred': 30, 'barney': 40 }\n\t */\n\t function zipObject(props, values) {\n\t var index = -1,\n\t length = props ? props.length : 0,\n\t result = {};\n\n\t if (length && !values && !isArray(props[0])) {\n\t values = [];\n\t }\n\t while (++index < length) {\n\t var key = props[index];\n\t if (values) {\n\t result[key] = values[index];\n\t } else if (key) {\n\t result[key[0]] = key[1];\n\t }\n\t }\n\t return result;\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates a `lodash` object that wraps `value` with explicit method\n\t * chaining enabled.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Chain\n\t * @param {*} value The value to wrap.\n\t * @returns {Object} Returns the new `lodash` object.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 },\n\t * { 'user': 'pebbles', 'age': 1 }\n\t * ];\n\t *\n\t * var youngest = _.chain(users)\n\t * .sortBy('age')\n\t * .map(function(chr) { return chr.user + ' is ' + chr.age; })\n\t * .first()\n\t * .value();\n\t * // => 'pebbles is 1'\n\t */\n\t function chain(value) {\n\t var result = lodash(value);\n\t result.__chain__ = true;\n\t return result;\n\t }\n\n\t /**\n\t * This method invokes `interceptor` and returns `value`. The interceptor is\n\t * bound to `thisArg` and invoked with one argument; (value). The purpose of\n\t * this method is to \"tap into\" a method chain in order to perform operations\n\t * on intermediate results within the chain.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Chain\n\t * @param {*} value The value to provide to `interceptor`.\n\t * @param {Function} interceptor The function to invoke.\n\t * @param {*} [thisArg] The `this` binding of `interceptor`.\n\t * @returns {*} Returns `value`.\n\t * @example\n\t *\n\t * _([1, 2, 3])\n\t * .tap(function(array) { array.pop(); })\n\t * .reverse()\n\t * .value();\n\t * // => [2, 1]\n\t */\n\t function tap(value, interceptor, thisArg) {\n\t interceptor.call(thisArg, value);\n\t return value;\n\t }\n\n\t /**\n\t * This method is like `_.tap` except that it returns the result of `interceptor`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Chain\n\t * @param {*} value The value to provide to `interceptor`.\n\t * @param {Function} interceptor The function to invoke.\n\t * @param {*} [thisArg] The `this` binding of `interceptor`.\n\t * @returns {*} Returns the result of `interceptor`.\n\t * @example\n\t *\n\t * _([1, 2, 3])\n\t * .last()\n\t * .thru(function(value) { return [value]; })\n\t * .value();\n\t * // => [3]\n\t */\n\t function thru(value, interceptor, thisArg) {\n\t return interceptor.call(thisArg, value);\n\t }\n\n\t /**\n\t * Enables explicit method chaining on the wrapper object.\n\t *\n\t * @name chain\n\t * @memberOf _\n\t * @category Chain\n\t * @returns {*} Returns the `lodash` object.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 }\n\t * ];\n\t *\n\t * // without explicit chaining\n\t * _(users).first();\n\t * // => { 'user': 'barney', 'age': 36 }\n\t *\n\t * // with explicit chaining\n\t * _(users).chain()\n\t * .first()\n\t * .pick('user')\n\t * .value();\n\t * // => { 'user': 'barney' }\n\t */\n\t function wrapperChain() {\n\t return chain(this);\n\t }\n\n\t /**\n\t * Reverses the wrapped array so the first element becomes the last, the\n\t * second element becomes the second to last, and so on.\n\t *\n\t * **Note:** This method mutates the wrapped array.\n\t *\n\t * @name reverse\n\t * @memberOf _\n\t * @category Chain\n\t * @returns {Object} Returns the new reversed `lodash` object.\n\t * @example\n\t *\n\t * var array = [1, 2, 3];\n\t *\n\t * _(array).reverse().value()\n\t * // => [3, 2, 1]\n\t *\n\t * console.log(array);\n\t * // => [3, 2, 1]\n\t */\n\t function wrapperReverse() {\n\t var value = this.__wrapped__;\n\t if (value instanceof LazyWrapper) {\n\t if (this.__actions__.length) {\n\t value = new LazyWrapper(this);\n\t }\n\t return new LodashWrapper(value.reverse());\n\t }\n\t return this.thru(function(value) {\n\t return value.reverse();\n\t });\n\t }\n\n\t /**\n\t * Produces the result of coercing the unwrapped value to a string.\n\t *\n\t * @name toString\n\t * @memberOf _\n\t * @category Chain\n\t * @returns {string} Returns the coerced string value.\n\t * @example\n\t *\n\t * _([1, 2, 3]).toString();\n\t * // => '1,2,3'\n\t */\n\t function wrapperToString() {\n\t return (this.value() + '');\n\t }\n\n\t /**\n\t * Executes the chained sequence to extract the unwrapped value.\n\t *\n\t * @name value\n\t * @memberOf _\n\t * @alias toJSON, valueOf\n\t * @category Chain\n\t * @returns {*} Returns the resolved unwrapped value.\n\t * @example\n\t *\n\t * _([1, 2, 3]).value();\n\t * // => [1, 2, 3]\n\t */\n\t function wrapperValue() {\n\t return baseWrapperValue(this.__wrapped__, this.__actions__);\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates an array of elements corresponding to the given keys, or indexes,\n\t * of `collection`. Keys may be specified as individual arguments or as arrays\n\t * of keys.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {...(number|number[]|string|string[])} [props] The property names\n\t * or indexes of elements to pick, specified individually or in arrays.\n\t * @returns {Array} Returns the new array of picked elements.\n\t * @example\n\t *\n\t * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);\n\t * // => ['a', 'c', 'e']\n\t *\n\t * _.at(['fred', 'barney', 'pebbles'], 0, 2);\n\t * // => ['fred', 'pebbles']\n\t */\n\t function at(collection) {\n\t var length = collection ? collection.length : 0;\n\t if (isLength(length)) {\n\t collection = toIterable(collection);\n\t }\n\t return baseAt(collection, baseFlatten(arguments, false, false, 1));\n\t }\n\n\t /**\n\t * Checks if `value` is in `collection` using `SameValueZero` for equality\n\t * comparisons. If `fromIndex` is negative, it is used as the offset from\n\t * the end of `collection`.\n\t *\n\t * **Note:** `SameValueZero` comparisons are like strict equality comparisons,\n\t * e.g. `===`, except that `NaN` matches `NaN`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias contains, include\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to search.\n\t * @param {*} target The value to search for.\n\t * @param {number} [fromIndex=0] The index to search from.\n\t * @returns {boolean} Returns `true` if a matching element is found, else `false`.\n\t * @example\n\t *\n\t * _.includes([1, 2, 3], 1);\n\t * // => true\n\t *\n\t * _.includes([1, 2, 3], 1, 2);\n\t * // => false\n\t *\n\t * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');\n\t * // => true\n\t *\n\t * _.includes('pebbles', 'eb');\n\t * // => true\n\t */\n\t function includes(collection, target, fromIndex) {\n\t var length = collection ? collection.length : 0;\n\t if (!isLength(length)) {\n\t collection = values(collection);\n\t length = collection.length;\n\t }\n\t if (!length) {\n\t return false;\n\t }\n\t if (typeof fromIndex == 'number') {\n\t fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n\t } else {\n\t fromIndex = 0;\n\t }\n\t return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n\t ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)\n\t : (getIndexOf(collection, target, fromIndex) > -1);\n\t }\n\n\t /**\n\t * Creates an object composed of keys generated from the results of running\n\t * each element of `collection` through `iteratee`. The corresponding value\n\t * of each key is the number of times the key was returned by `iteratee`.\n\t * The `iteratee` is bound to `thisArg` and invoked with three arguments;\n\t * (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns the composed aggregate object.\n\t * @example\n\t *\n\t * _.countBy([4.3, 6.1, 6.4], function(n) { return Math.floor(n); });\n\t * // => { '4': 1, '6': 2 }\n\t *\n\t * _.countBy([4.3, 6.1, 6.4], function(n) { return this.floor(n); }, Math);\n\t * // => { '4': 1, '6': 2 }\n\t *\n\t * _.countBy(['one', 'two', 'three'], 'length');\n\t * // => { '3': 2, '5': 1 }\n\t */\n\t var countBy = createAggregator(function(result, value, key) {\n\t hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\n\t });\n\n\t /**\n\t * Checks if `predicate` returns truthy for **all** elements of `collection`.\n\t * The predicate is bound to `thisArg` and invoked with three arguments;\n\t * (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias all\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {boolean} Returns `true` if all elements pass the predicate check,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.every([true, 1, null, 'yes']);\n\t * // => false\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.every(users, 'age');\n\t * // => true\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.every(users, { 'age': 36 });\n\t * // => false\n\t */\n\t function every(collection, predicate, thisArg) {\n\t var func = isArray(collection) ? arrayEvery : baseEvery;\n\t if (typeof predicate != 'function' || typeof thisArg != 'undefined') {\n\t predicate = getCallback(predicate, thisArg, 3);\n\t }\n\t return func(collection, predicate);\n\t }\n\n\t /**\n\t * Iterates over elements of `collection`, returning an array of all elements\n\t * `predicate` returns truthy for. The predicate is bound to `thisArg` and\n\t * invoked with three arguments; (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias select\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the new filtered array.\n\t * @example\n\t *\n\t * var evens = _.filter([1, 2, 3, 4], function(n) { return n % 2 == 0; });\n\t * // => [2, 4]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': false },\n\t * { 'user': 'fred', 'age': 40, 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.filter(users, 'active'), 'user');\n\t * // => ['fred']\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.pluck(_.filter(users, { 'age': 36 }), 'user');\n\t * // => ['barney']\n\t */\n\t function filter(collection, predicate, thisArg) {\n\t var func = isArray(collection) ? arrayFilter : baseFilter;\n\t predicate = getCallback(predicate, thisArg, 3);\n\t return func(collection, predicate);\n\t }\n\n\t /**\n\t * Iterates over elements of `collection`, returning the first element\n\t * `predicate` returns truthy for. The predicate is bound to `thisArg` and\n\t * invoked with three arguments; (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias detect\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to search.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {*} Returns the matched element, else `undefined`.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': false },\n\t * { 'user': 'fred', 'age': 40, 'active': true },\n\t * { 'user': 'pebbles', 'age': 1, 'active': false }\n\t * ];\n\t *\n\t * _.result(_.find(users, function(chr) { return chr.age < 40; }), 'user');\n\t * // => 'barney'\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.result(_.find(users, { 'age': 1 }), 'user');\n\t * // => 'pebbles'\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.result(_.find(users, 'active'), 'user');\n\t * // => 'fred'\n\t */\n\t function find(collection, predicate, thisArg) {\n\t if (isArray(collection)) {\n\t var index = findIndex(collection, predicate, thisArg);\n\t return index > -1 ? collection[index] : undefined;\n\t }\n\t predicate = getCallback(predicate, thisArg, 3);\n\t return baseFind(collection, predicate, baseEach);\n\t }\n\n\t /**\n\t * This method is like `_.find` except that it iterates over elements of\n\t * `collection` from right to left.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to search.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {*} Returns the matched element, else `undefined`.\n\t * @example\n\t *\n\t * _.findLast([1, 2, 3, 4], function(n) { return n % 2 == 1; });\n\t * // => 3\n\t */\n\t function findLast(collection, predicate, thisArg) {\n\t predicate = getCallback(predicate, thisArg, 3);\n\t return baseFind(collection, predicate, baseEachRight);\n\t }\n\n\t /**\n\t * Performs a deep comparison between each element in `collection` and the\n\t * source object, returning the first element that has equivalent property\n\t * values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to search.\n\t * @param {Object} source The object of property values to match.\n\t * @returns {*} Returns the matched element, else `undefined`.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'status': 'busy' },\n\t * { 'user': 'fred', 'age': 40, 'status': 'busy' }\n\t * ];\n\t *\n\t * _.result(_.findWhere(users, { 'status': 'busy' }), 'user');\n\t * // => 'barney'\n\t *\n\t * _.result(_.findWhere(users, { 'age': 40 }), 'user');\n\t * // => 'fred'\n\t */\n\t function findWhere(collection, source) {\n\t return find(collection, baseMatches(source));\n\t }\n\n\t /**\n\t * Iterates over elements of `collection` invoking `iteratee` for each element.\n\t * The `iteratee` is bound to `thisArg` and invoked with three arguments;\n\t * (value, index|key, collection). Iterator functions may exit iteration early\n\t * by explicitly returning `false`.\n\t *\n\t * **Note:** As with other \"Collections\" methods, objects with a `length` property\n\t * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n\t * may be used for object iteration.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias each\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Array|Object|string} Returns `collection`.\n\t * @example\n\t *\n\t * _([1, 2, 3]).forEach(function(n) { console.log(n); }).value();\n\t * // => logs each value from left to right and returns the array\n\t *\n\t * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(n, key) { console.log(n, key); });\n\t * // => logs each value-key pair and returns the object (iteration order is not guaranteed)\n\t */\n\t function forEach(collection, iteratee, thisArg) {\n\t return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))\n\t ? arrayEach(collection, iteratee)\n\t : baseEach(collection, bindCallback(iteratee, thisArg, 3));\n\t }\n\n\t /**\n\t * This method is like `_.forEach` except that it iterates over elements of\n\t * `collection` from right to left.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias eachRight\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Array|Object|string} Returns `collection`.\n\t * @example\n\t *\n\t * _([1, 2, 3]).forEachRight(function(n) { console.log(n); }).join(',');\n\t * // => logs each value from right to left and returns the array\n\t */\n\t function forEachRight(collection, iteratee, thisArg) {\n\t return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))\n\t ? arrayEachRight(collection, iteratee)\n\t : baseEachRight(collection, bindCallback(iteratee, thisArg, 3));\n\t }\n\n\t /**\n\t * Creates an object composed of keys generated from the results of running\n\t * each element of `collection` through `iteratee`. The corresponding value\n\t * of each key is an array of the elements responsible for generating the key.\n\t * The `iteratee` is bound to `thisArg` and invoked with three arguments;\n\t * (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns the composed aggregate object.\n\t * @example\n\t *\n\t * _.groupBy([4.2, 6.1, 6.4], function(n) { return Math.floor(n); });\n\t * // => { '4': [4.2], '6': [6.1, 6.4] }\n\t *\n\t * _.groupBy([4.2, 6.1, 6.4], function(n) { return this.floor(n); }, Math);\n\t * // => { '4': [4.2], '6': [6.1, 6.4] }\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.groupBy(['one', 'two', 'three'], 'length');\n\t * // => { '3': ['one', 'two'], '5': ['three'] }\n\t */\n\t var groupBy = createAggregator(function(result, value, key) {\n\t if (hasOwnProperty.call(result, key)) {\n\t result[key].push(value);\n\t } else {\n\t result[key] = [value];\n\t }\n\t });\n\n\t /**\n\t * Creates an object composed of keys generated from the results of running\n\t * each element of `collection` through `iteratee`. The corresponding value\n\t * of each key is the last element responsible for generating the key. The\n\t * iteratee function is bound to `thisArg` and invoked with three arguments;\n\t * (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns the composed aggregate object.\n\t * @example\n\t *\n\t * var keyData = [\n\t * { 'dir': 'left', 'code': 97 },\n\t * { 'dir': 'right', 'code': 100 }\n\t * ];\n\t *\n\t * _.indexBy(keyData, 'dir');\n\t * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n\t *\n\t * _.indexBy(keyData, function(object) { return String.fromCharCode(object.code); });\n\t * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n\t *\n\t * _.indexBy(keyData, function(object) { return this.fromCharCode(object.code); }, String);\n\t * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n\t */\n\t var indexBy = createAggregator(function(result, value, key) {\n\t result[key] = value;\n\t });\n\n\t /**\n\t * Invokes the method named by `methodName` on each element in `collection`,\n\t * returning an array of the results of each invoked method. Any additional\n\t * arguments are provided to each invoked method. If `methodName` is a function\n\t * it is invoked for, and `this` bound to, each element in `collection`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|string} methodName The name of the method to invoke or\n\t * the function invoked per iteration.\n\t * @param {...*} [args] The arguments to invoke the method with.\n\t * @returns {Array} Returns the array of results.\n\t * @example\n\t *\n\t * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\n\t * // => [[1, 5, 7], [1, 2, 3]]\n\t *\n\t * _.invoke([123, 456], String.prototype.split, '');\n\t * // => [['1', '2', '3'], ['4', '5', '6']]\n\t */\n\t function invoke(collection, methodName) {\n\t return baseInvoke(collection, methodName, baseSlice(arguments, 2));\n\t }\n\n\t /**\n\t * Creates an array of values by running each element in `collection` through\n\t * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three\n\t * arguments; (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias collect\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Array} Returns the new mapped array.\n\t * @example\n\t *\n\t * _.map([1, 2, 3], function(n) { return n * 3; });\n\t * // => [3, 6, 9]\n\t *\n\t * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(n) { return n * 3; });\n\t * // => [3, 6, 9] (iteration order is not guaranteed)\n\t *\n\t * var users = [\n\t * { 'user': 'barney' },\n\t * { 'user': 'fred' }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.map(users, 'user');\n\t * // => ['barney', 'fred']\n\t */\n\t function map(collection, iteratee, thisArg) {\n\t var func = isArray(collection) ? arrayMap : baseMap;\n\t iteratee = getCallback(iteratee, thisArg, 3);\n\t return func(collection, iteratee);\n\t }\n\n\t /**\n\t * Gets the maximum value of `collection`. If `collection` is empty or falsey\n\t * `-Infinity` is returned. If an iteratee function is provided it is invoked\n\t * for each value in `collection` to generate the criterion by which the value\n\t * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\n\t * arguments; (value, index, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n\t * If a property name or object is provided it is used to create a \"_.property\"\n\t * or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {*} Returns the maximum value.\n\t * @example\n\t *\n\t * _.max([4, 2, 8, 6]);\n\t * // => 8\n\t *\n\t * _.max([]);\n\t * // => -Infinity\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 }\n\t * ];\n\t *\n\t * _.max(users, function(chr) { return chr.age; });\n\t * // => { 'user': 'fred', 'age': 40 };\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.max(users, 'age');\n\t * // => { 'user': 'fred', 'age': 40 };\n\t */\n\t var max = createExtremum(arrayMax);\n\n\t /**\n\t * Gets the minimum value of `collection`. If `collection` is empty or falsey\n\t * `Infinity` is returned. If an iteratee function is provided it is invoked\n\t * for each value in `collection` to generate the criterion by which the value\n\t * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\n\t * arguments; (value, index, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n\t * If a property name or object is provided it is used to create a \"_.property\"\n\t * or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {*} Returns the minimum value.\n\t * @example\n\t *\n\t * _.min([4, 2, 8, 6]);\n\t * // => 2\n\t *\n\t * _.min([]);\n\t * // => Infinity\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 }\n\t * ];\n\t *\n\t * _.min(users, function(chr) { return chr.age; });\n\t * // => { 'user': 'barney', 'age': 36 };\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.min(users, 'age');\n\t * // => { 'user': 'barney', 'age': 36 };\n\t */\n\t var min = createExtremum(arrayMin, true);\n\n\t /**\n\t * Creates an array of elements split into two groups, the first of which\n\t * contains elements `predicate` returns truthy for, while the second of which\n\t * contains elements `predicate` returns falsey for. The predicate is bound\n\t * to `thisArg` and invoked with three arguments; (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the array of grouped elements.\n\t * @example\n\t *\n\t * _.partition([1, 2, 3], function(n) { return n % 2; });\n\t * // => [[1, 3], [2]]\n\t *\n\t * _.partition([1.2, 2.3, 3.4], function(n) { return this.floor(n) % 2; }, Math);\n\t * // => [[1, 3], [2]]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': false },\n\t * { 'user': 'fred', 'age': 40, 'active': true },\n\t * { 'user': 'pebbles', 'age': 1, 'active': false }\n\t * ];\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.map(_.partition(users, { 'age': 1 }), function(array) { return _.pluck(array, 'user'); });\n\t * // => [['pebbles'], ['barney', 'fred']]\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.map(_.partition(users, 'active'), function(array) { return _.pluck(array, 'user'); });\n\t * // => [['fred'], ['barney', 'pebbles']]\n\t */\n\t var partition = createAggregator(function(result, value, key) {\n\t result[key ? 0 : 1].push(value);\n\t }, function() { return [[], []]; });\n\n\t /**\n\t * Gets the value of `key` from all elements in `collection`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {string} key The key of the property to pluck.\n\t * @returns {Array} Returns the property values.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 }\n\t * ];\n\t *\n\t * _.pluck(users, 'user');\n\t * // => ['barney', 'fred']\n\t *\n\t * var userIndex = _.indexBy(users, 'user');\n\t * _.pluck(userIndex, 'age');\n\t * // => [36, 40] (iteration order is not guaranteed)\n\t */\n\t function pluck(collection, key) {\n\t return map(collection, baseProperty(key + ''));\n\t }\n\n\t /**\n\t * Reduces `collection` to a value which is the accumulated result of running\n\t * each element in `collection` through `iteratee`, where each successive\n\t * invocation is supplied the return value of the previous. If `accumulator`\n\t * is not provided the first element of `collection` is used as the initial\n\t * value. The `iteratee` is bound to `thisArg`and invoked with four arguments;\n\t * (accumulator, value, index|key, collection).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias foldl, inject\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [accumulator] The initial value.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {*} Returns the accumulated value.\n\t * @example\n\t *\n\t * var sum = _.reduce([1, 2, 3], function(sum, n) { return sum + n; });\n\t * // => 6\n\t *\n\t * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, n, key) {\n\t * result[key] = n * 3;\n\t * return result;\n\t * }, {});\n\t * // => { 'a': 3, 'b': 6, 'c': 9 } (iteration order is not guaranteed)\n\t */\n\t function reduce(collection, iteratee, accumulator, thisArg) {\n\t var func = isArray(collection) ? arrayReduce : baseReduce;\n\t return func(collection, getCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEach);\n\t }\n\n\t /**\n\t * This method is like `_.reduce` except that it iterates over elements of\n\t * `collection` from right to left.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias foldr\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [accumulator] The initial value.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {*} Returns the accumulated value.\n\t * @example\n\t *\n\t * var array = [[0, 1], [2, 3], [4, 5]];\n\t * _.reduceRight(array, function(flattened, other) { return flattened.concat(other); }, []);\n\t * // => [4, 5, 2, 3, 0, 1]\n\t */\n\t function reduceRight(collection, iteratee, accumulator, thisArg) {\n\t var func = isArray(collection) ? arrayReduceRight : baseReduce;\n\t return func(collection, getCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEachRight);\n\t }\n\n\t /**\n\t * The opposite of `_.filter`; this method returns the elements of `collection`\n\t * that `predicate` does **not** return truthy for.\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Array} Returns the new filtered array.\n\t * @example\n\t *\n\t * var odds = _.reject([1, 2, 3, 4], function(n) { return n % 2 == 0; });\n\t * // => [1, 3]\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': false },\n\t * { 'user': 'fred', 'age': 40, 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.reject(users, 'active'), 'user');\n\t * // => ['barney']\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.pluck(_.reject(users, { 'age': 36 }), 'user');\n\t * // => ['fred']\n\t */\n\t function reject(collection, predicate, thisArg) {\n\t var func = isArray(collection) ? arrayFilter : baseFilter;\n\t predicate = getCallback(predicate, thisArg, 3);\n\t return func(collection, function(value, index, collection) {\n\t return !predicate(value, index, collection);\n\t });\n\t }\n\n\t /**\n\t * Gets a random element or `n` random elements from a collection.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to sample.\n\t * @param {number} [n] The number of elements to sample.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {*} Returns the random sample(s).\n\t * @example\n\t *\n\t * _.sample([1, 2, 3, 4]);\n\t * // => 2\n\t *\n\t * _.sample([1, 2, 3, 4], 2);\n\t * // => [3, 1]\n\t */\n\t function sample(collection, n, guard) {\n\t if (guard ? isIterateeCall(collection, n, guard) : n == null) {\n\t collection = toIterable(collection);\n\t var length = collection.length;\n\t return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\n\t }\n\t var result = shuffle(collection);\n\t result.length = nativeMin(n < 0 ? 0 : (+n || 0), result.length);\n\t return result;\n\t }\n\n\t /**\n\t * Creates an array of shuffled values, using a version of the Fisher-Yates\n\t * shuffle. See [Wikipedia](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to shuffle.\n\t * @returns {Array} Returns the new shuffled array.\n\t * @example\n\t *\n\t * _.shuffle([1, 2, 3, 4]);\n\t * // => [4, 1, 3, 2]\n\t */\n\t function shuffle(collection) {\n\t collection = toIterable(collection);\n\n\t var index = -1,\n\t length = collection.length,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t var rand = baseRandom(0, index);\n\t if (index != rand) {\n\t result[index] = result[rand];\n\t }\n\t result[rand] = collection[index];\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Gets the size of `collection` by returning `collection.length` for\n\t * array-like values or the number of own enumerable properties for objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to inspect.\n\t * @returns {number} Returns the size of `collection`.\n\t * @example\n\t *\n\t * _.size([1, 2]);\n\t * // => 2\n\t *\n\t * _.size({ 'one': 1, 'two': 2, 'three': 3 });\n\t * // => 3\n\t *\n\t * _.size('pebbles');\n\t * // => 7\n\t */\n\t function size(collection) {\n\t var length = collection ? collection.length : 0;\n\t return isLength(length) ? length : keys(collection).length;\n\t }\n\n\t /**\n\t * Checks if `predicate` returns truthy for **any** element of `collection`.\n\t * The function returns as soon as it finds a passing value and does not iterate\n\t * over the entire collection. The predicate is bound to `thisArg` and invoked\n\t * with three arguments; (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias any\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {boolean} Returns `true` if any element passes the predicate check,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.some([null, 0, 'yes', false], Boolean);\n\t * // => true\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'active': false },\n\t * { 'user': 'fred', 'age': 40, 'active': true }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.some(users, 'active');\n\t * // => true\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.some(users, { 'age': 1 });\n\t * // => false\n\t */\n\t function some(collection, predicate, thisArg) {\n\t var func = isArray(collection) ? arraySome : baseSome;\n\t if (typeof predicate != 'function' || typeof thisArg != 'undefined') {\n\t predicate = getCallback(predicate, thisArg, 3);\n\t }\n\t return func(collection, predicate);\n\t }\n\n\t /**\n\t * Creates an array of elements, sorted in ascending order by the results of\n\t * running each element in a collection through `iteratee`. This method performs\n\t * a stable sort, that is, it preserves the original sort order of equal elements.\n\t * The `iteratee` is bound to `thisArg` and invoked with three arguments;\n\t * (value, index|key, collection).\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {Array|Function|Object|string} [iteratee=_.identity] The function\n\t * invoked per iteration. If a property name or an object is provided it is\n\t * used to create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Array} Returns the new sorted array.\n\t * @example\n\t *\n\t * _.sortBy([1, 2, 3], function(n) { return Math.sin(n); });\n\t * // => [3, 1, 2]\n\t *\n\t * _.sortBy([1, 2, 3], function(n) { return this.sin(n); }, Math);\n\t * // => [3, 1, 2]\n\t *\n\t * var users = [\n\t * { 'user': 'fred' },\n\t * { 'user': 'pebbles' },\n\t * { 'user': 'barney' }\n\t * ];\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.pluck(_.sortBy(users, 'user'), 'user');\n\t * // => ['barney', 'fred', 'pebbles']\n\t */\n\t function sortBy(collection, iteratee, thisArg) {\n\t var index = -1,\n\t length = collection ? collection.length : 0,\n\t result = isLength(length) ? Array(length) : [];\n\n\t if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n\t iteratee = null;\n\t }\n\t iteratee = getCallback(iteratee, thisArg, 3);\n\t baseEach(collection, function(value, key, collection) {\n\t result[++index] = { 'criteria': iteratee(value, key, collection), 'index': index, 'value': value };\n\t });\n\t return baseSortBy(result, compareAscending);\n\t }\n\n\t /**\n\t * This method is like `_.sortBy` except that it sorts by property names\n\t * instead of an iteratee function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to iterate over.\n\t * @param {...(string|string[])} props The property names to sort by,\n\t * specified as individual property names or arrays of property names.\n\t * @returns {Array} Returns the new sorted array.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36 },\n\t * { 'user': 'fred', 'age': 40 },\n\t * { 'user': 'barney', 'age': 26 },\n\t * { 'user': 'fred', 'age': 30 }\n\t * ];\n\t *\n\t * _.map(_.sortByAll(users, ['user', 'age']), _.values);\n\t * // => [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]\n\t */\n\t function sortByAll(collection) {\n\t var args = arguments;\n\t if (args.length > 3 && isIterateeCall(args[1], args[2], args[3])) {\n\t args = [collection, args[1]];\n\t }\n\t var index = -1,\n\t length = collection ? collection.length : 0,\n\t props = baseFlatten(args, false, false, 1),\n\t result = isLength(length) ? Array(length) : [];\n\n\t baseEach(collection, function(value, key, collection) {\n\t var length = props.length,\n\t criteria = Array(length);\n\n\t while (length--) {\n\t criteria[length] = value == null ? undefined : value[props[length]];\n\t }\n\t result[++index] = { 'criteria': criteria, 'index': index, 'value': value };\n\t });\n\t return baseSortBy(result, compareMultipleAscending);\n\t }\n\n\t /**\n\t * Performs a deep comparison between each element in `collection` and the\n\t * source object, returning an array of all elements that have equivalent\n\t * property values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Collection\n\t * @param {Array|Object|string} collection The collection to search.\n\t * @param {Object} source The object of property values to match.\n\t * @returns {Array} Returns the new filtered array.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney', 'age': 36, 'status': 'busy', 'pets': ['hoppy'] },\n\t * { 'user': 'fred', 'age': 40, 'status': 'busy', 'pets': ['baby puss', 'dino'] }\n\t * ];\n\t *\n\t * _.pluck(_.where(users, { 'age': 36 }), 'user');\n\t * // => ['barney']\n\t *\n\t * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');\n\t * // => ['fred']\n\t *\n\t * _.pluck(_.where(users, { 'status': 'busy' }), 'user');\n\t * // => ['barney', 'fred']\n\t */\n\t function where(collection, source) {\n\t return filter(collection, baseMatches(source));\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Gets the number of milliseconds that have elapsed since the Unix epoch\n\t * (1 January 1970 00:00:00 UTC).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Date\n\t * @example\n\t *\n\t * _.defer(function(stamp) { console.log(_.now() - stamp); }, _.now());\n\t * // => logs the number of milliseconds it took for the deferred function to be invoked\n\t */\n\t var now = nativeNow || function() {\n\t return new Date().getTime();\n\t };\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * The opposite of `_.before`; this method creates a function that invokes\n\t * `func` once it is called `n` or more times.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {number} n The number of calls before `func` is invoked.\n\t * @param {Function} func The function to restrict.\n\t * @returns {Function} Returns the new restricted function.\n\t * @example\n\t *\n\t * var saves = ['profile', 'settings'];\n\t *\n\t * var done = _.after(saves.length, function() {\n\t * console.log('done saving!');\n\t * });\n\t *\n\t * _.forEach(saves, function(type) {\n\t * asyncSave({ 'type': type, 'complete': done });\n\t * });\n\t * // => logs 'done saving!' after the two async saves have completed\n\t */\n\t function after(n, func) {\n\t if (!isFunction(func)) {\n\t if (isFunction(n)) {\n\t var temp = n;\n\t n = func;\n\t func = temp;\n\t } else {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t }\n\t n = nativeIsFinite(n = +n) ? n : 0;\n\t return function() {\n\t if (--n < 1) {\n\t return func.apply(this, arguments);\n\t }\n\t };\n\t }\n\n\t /**\n\t * Creates a function that accepts up to `n` arguments ignoring any\n\t * additional arguments.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to cap arguments for.\n\t * @param {number} [n=func.length] The arity cap.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n\t * // => [6, 8, 10]\n\t */\n\t function ary(func, n, guard) {\n\t if (guard && isIterateeCall(func, n, guard)) {\n\t n = null;\n\t }\n\t n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\n\t return createWrapper(func, ARY_FLAG, null, null, null, null, n);\n\t }\n\n\t /**\n\t * Creates a function that invokes `func`, with the `this` binding and arguments\n\t * of the created function, while it is called less than `n` times. Subsequent\n\t * calls to the created function return the result of the last `func` invocation.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {number} n The number of calls at which `func` is no longer invoked.\n\t * @param {Function} func The function to restrict.\n\t * @returns {Function} Returns the new restricted function.\n\t * @example\n\t *\n\t * jQuery('#add').on('click', _.before(5, addContactToList));\n\t * // => allows adding up to 4 contacts to the list\n\t */\n\t function before(n, func) {\n\t var result;\n\t if (!isFunction(func)) {\n\t if (isFunction(n)) {\n\t var temp = n;\n\t n = func;\n\t func = temp;\n\t } else {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t }\n\t return function() {\n\t if (--n > 0) {\n\t result = func.apply(this, arguments);\n\t } else {\n\t func = null;\n\t }\n\t return result;\n\t };\n\t }\n\n\t /**\n\t * Creates a function that invokes `func` with the `this` binding of `thisArg`\n\t * and prepends any additional `_.bind` arguments to those provided to the\n\t * bound function.\n\t *\n\t * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n\t * may be used as a placeholder for partially applied arguments.\n\t *\n\t * **Note:** Unlike native `Function#bind` this method does not set the `length`\n\t * property of bound functions.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to bind.\n\t * @param {*} thisArg The `this` binding of `func`.\n\t * @param {...*} [args] The arguments to be partially applied.\n\t * @returns {Function} Returns the new bound function.\n\t * @example\n\t *\n\t * var greet = function(greeting, punctuation) {\n\t * return greeting + ' ' + this.user + punctuation;\n\t * };\n\t *\n\t * var object = { 'user': 'fred' };\n\t *\n\t * var bound = _.bind(greet, object, 'hi');\n\t * bound('!');\n\t * // => 'hi fred!'\n\t *\n\t * // using placeholders\n\t * var bound = _.bind(greet, object, _, '!');\n\t * bound('hi');\n\t * // => 'hi fred!'\n\t */\n\t function bind(func, thisArg) {\n\t var bitmask = BIND_FLAG;\n\t if (arguments.length > 2) {\n\t var partials = baseSlice(arguments, 2),\n\t holders = replaceHolders(partials, bind.placeholder);\n\n\t bitmask |= PARTIAL_FLAG;\n\t }\n\t return createWrapper(func, bitmask, thisArg, partials, holders);\n\t }\n\n\t /**\n\t * Binds methods of an object to the object itself, overwriting the existing\n\t * method. Method names may be specified as individual arguments or as arrays\n\t * of method names. If no method names are provided all enumerable function\n\t * properties, own and inherited, of `object` are bound.\n\t *\n\t * **Note:** This method does not set the `length` property of bound functions.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Object} object The object to bind and assign the bound methods to.\n\t * @param {...(string|string[])} [methodNames] The object method names to bind,\n\t * specified as individual method names or arrays of method names.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var view = {\n\t * 'label': 'docs',\n\t * 'onClick': function() { console.log('clicked ' + this.label); }\n\t * };\n\t *\n\t * _.bindAll(view);\n\t * jQuery('#docs').on('click', view.onClick);\n\t * // => logs 'clicked docs' when the element is clicked\n\t */\n\t function bindAll(object) {\n\t return baseBindAll(object,\n\t arguments.length > 1\n\t ? baseFlatten(arguments, false, false, 1)\n\t : functions(object)\n\t );\n\t }\n\n\t /**\n\t * Creates a function that invokes the method at `object[key]` and prepends\n\t * any additional `_.bindKey` arguments to those provided to the bound function.\n\t *\n\t * This method differs from `_.bind` by allowing bound functions to reference\n\t * methods that may be redefined or don't yet exist.\n\t * See [Peter Michaux's article](http://michaux.ca/articles/lazy-function-definition-pattern)\n\t * for more details.\n\t *\n\t * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n\t * builds, may be used as a placeholder for partially applied arguments.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Object} object The object the method belongs to.\n\t * @param {string} key The key of the method.\n\t * @param {...*} [args] The arguments to be partially applied.\n\t * @returns {Function} Returns the new bound function.\n\t * @example\n\t *\n\t * var object = {\n\t * 'user': 'fred',\n\t * 'greet': function(greeting, punctuation) {\n\t * return greeting + ' ' + this.user + punctuation;\n\t * }\n\t * };\n\t *\n\t * var bound = _.bindKey(object, 'greet', 'hi');\n\t * bound('!');\n\t * // => 'hi fred!'\n\t *\n\t * object.greet = function(greeting, punctuation) {\n\t * return greeting + 'ya ' + this.user + punctuation;\n\t * };\n\t *\n\t * bound('!');\n\t * // => 'hiya fred!'\n\t *\n\t * // using placeholders\n\t * var bound = _.bindKey(object, 'greet', _, '!');\n\t * bound('hi');\n\t * // => 'hiya fred!'\n\t */\n\t function bindKey(object, key) {\n\t var bitmask = BIND_FLAG | BIND_KEY_FLAG;\n\t if (arguments.length > 2) {\n\t var partials = baseSlice(arguments, 2),\n\t holders = replaceHolders(partials, bindKey.placeholder);\n\n\t bitmask |= PARTIAL_FLAG;\n\t }\n\t return createWrapper(key, bitmask, object, partials, holders);\n\t }\n\n\t /**\n\t * Creates a function that accepts one or more arguments of `func` that when\n\t * called either invokes `func` returning its result, if all `func` arguments\n\t * have been provided, or returns a function that accepts one or more of the\n\t * remaining `func` arguments, and so on. The arity of `func` may be specified\n\t * if `func.length` is not sufficient.\n\t *\n\t * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n\t * may be used as a placeholder for provided arguments.\n\t *\n\t * **Note:** This method does not set the `length` property of curried functions.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to curry.\n\t * @param {number} [arity=func.length] The arity of `func`.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Function} Returns the new curried function.\n\t * @example\n\t *\n\t * var abc = function(a, b, c) {\n\t * return [a, b, c];\n\t * };\n\t *\n\t * var curried = _.curry(abc);\n\t *\n\t * curried(1)(2)(3);\n\t * // => [1, 2, 3]\n\t *\n\t * curried(1, 2)(3);\n\t * // => [1, 2, 3]\n\t *\n\t * curried(1, 2, 3);\n\t * // => [1, 2, 3]\n\t *\n\t * // using placeholders\n\t * curried(1)(_, 3)(2);\n\t * // => [1, 2, 3]\n\t */\n\t function curry(func, arity, guard) {\n\t if (guard && isIterateeCall(func, arity, guard)) {\n\t arity = null;\n\t }\n\t var result = createWrapper(func, CURRY_FLAG, null, null, null, null, null, arity);\n\t result.placeholder = curry.placeholder;\n\t return result;\n\t }\n\n\t /**\n\t * This method is like `_.curry` except that arguments are applied to `func`\n\t * in the manner of `_.partialRight` instead of `_.partial`.\n\t *\n\t * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n\t * builds, may be used as a placeholder for provided arguments.\n\t *\n\t * **Note:** This method does not set the `length` property of curried functions.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to curry.\n\t * @param {number} [arity=func.length] The arity of `func`.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Function} Returns the new curried function.\n\t * @example\n\t *\n\t * var abc = function(a, b, c) {\n\t * return [a, b, c];\n\t * };\n\t *\n\t * var curried = _.curryRight(abc);\n\t *\n\t * curried(3)(2)(1);\n\t * // => [1, 2, 3]\n\t *\n\t * curried(2, 3)(1);\n\t * // => [1, 2, 3]\n\t *\n\t * curried(1, 2, 3);\n\t * // => [1, 2, 3]\n\t *\n\t * // using placeholders\n\t * curried(3)(1, _)(2);\n\t * // => [1, 2, 3]\n\t */\n\t function curryRight(func, arity, guard) {\n\t if (guard && isIterateeCall(func, arity, guard)) {\n\t arity = null;\n\t }\n\t var result = createWrapper(func, CURRY_RIGHT_FLAG, null, null, null, null, null, arity);\n\t result.placeholder = curryRight.placeholder;\n\t return result;\n\t }\n\n\t /**\n\t * Creates a function that delays invoking `func` until after `wait` milliseconds\n\t * have elapsed since the last time it was invoked. The created function comes\n\t * with a `cancel` method to cancel delayed invocations. Provide an options\n\t * object to indicate that `func` should be invoked on the leading and/or\n\t * trailing edge of the `wait` timeout. Subsequent calls to the debounced\n\t * function return the result of the last `func` invocation.\n\t *\n\t * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n\t * on the trailing edge of the timeout only if the the debounced function is\n\t * invoked more than once during the `wait` timeout.\n\t *\n\t * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n\t * for details over the differences between `_.debounce` and `_.throttle`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to debounce.\n\t * @param {number} wait The number of milliseconds to delay.\n\t * @param {Object} [options] The options object.\n\t * @param {boolean} [options.leading=false] Specify invoking on the leading\n\t * edge of the timeout.\n\t * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n\t * delayed before it is invoked.\n\t * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n\t * edge of the timeout.\n\t * @returns {Function} Returns the new debounced function.\n\t * @example\n\t *\n\t * // avoid costly calculations while the window size is in flux\n\t * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n\t *\n\t * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n\t * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n\t * 'leading': true,\n\t * 'trailing': false\n\t * }));\n\t *\n\t * // ensure `batchLog` is invoked once after 1 second of debounced calls\n\t * var source = new EventSource('/stream');\n\t * jQuery(source).on('message', _.debounce(batchLog, 250, {\n\t * 'maxWait': 1000\n\t * }));\n\t *\n\t * // cancel a debounced call\n\t * var todoChanges = _.debounce(batchLog, 1000);\n\t * Object.observe(models.todo, todoChanges);\n\t *\n\t * Object.observe(models, function(changes) {\n\t * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n\t * todoChanges.cancel();\n\t * }\n\t * }, ['delete']);\n\t *\n\t * // ...at some point `models.todo` is changed\n\t * models.todo.completed = true;\n\t *\n\t * // ...before 1 second has passed `models.todo` is deleted\n\t * // which cancels the debounced `todoChanges` call\n\t * delete models.todo;\n\t */\n\t function debounce(func, wait, options) {\n\t var args,\n\t maxTimeoutId,\n\t result,\n\t stamp,\n\t thisArg,\n\t timeoutId,\n\t trailingCall,\n\t lastCalled = 0,\n\t maxWait = false,\n\t trailing = true;\n\n\t if (!isFunction(func)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t wait = wait < 0 ? 0 : wait;\n\t if (options === true) {\n\t var leading = true;\n\t trailing = false;\n\t } else if (isObject(options)) {\n\t leading = options.leading;\n\t maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n\t trailing = 'trailing' in options ? options.trailing : trailing;\n\t }\n\n\t function cancel() {\n\t if (timeoutId) {\n\t clearTimeout(timeoutId);\n\t }\n\t if (maxTimeoutId) {\n\t clearTimeout(maxTimeoutId);\n\t }\n\t maxTimeoutId = timeoutId = trailingCall = undefined;\n\t }\n\n\t function delayed() {\n\t var remaining = wait - (now() - stamp);\n\t if (remaining <= 0 || remaining > wait) {\n\t if (maxTimeoutId) {\n\t clearTimeout(maxTimeoutId);\n\t }\n\t var isCalled = trailingCall;\n\t maxTimeoutId = timeoutId = trailingCall = undefined;\n\t if (isCalled) {\n\t lastCalled = now();\n\t result = func.apply(thisArg, args);\n\t if (!timeoutId && !maxTimeoutId) {\n\t args = thisArg = null;\n\t }\n\t }\n\t } else {\n\t timeoutId = setTimeout(delayed, remaining);\n\t }\n\t }\n\n\t function maxDelayed() {\n\t if (timeoutId) {\n\t clearTimeout(timeoutId);\n\t }\n\t maxTimeoutId = timeoutId = trailingCall = undefined;\n\t if (trailing || (maxWait !== wait)) {\n\t lastCalled = now();\n\t result = func.apply(thisArg, args);\n\t if (!timeoutId && !maxTimeoutId) {\n\t args = thisArg = null;\n\t }\n\t }\n\t }\n\n\t function debounced() {\n\t args = arguments;\n\t stamp = now();\n\t thisArg = this;\n\t trailingCall = trailing && (timeoutId || !leading);\n\n\t if (maxWait === false) {\n\t var leadingCall = leading && !timeoutId;\n\t } else {\n\t if (!maxTimeoutId && !leading) {\n\t lastCalled = stamp;\n\t }\n\t var remaining = maxWait - (stamp - lastCalled),\n\t isCalled = remaining <= 0 || remaining > maxWait;\n\n\t if (isCalled) {\n\t if (maxTimeoutId) {\n\t maxTimeoutId = clearTimeout(maxTimeoutId);\n\t }\n\t lastCalled = stamp;\n\t result = func.apply(thisArg, args);\n\t }\n\t else if (!maxTimeoutId) {\n\t maxTimeoutId = setTimeout(maxDelayed, remaining);\n\t }\n\t }\n\t if (isCalled && timeoutId) {\n\t timeoutId = clearTimeout(timeoutId);\n\t }\n\t else if (!timeoutId && wait !== maxWait) {\n\t timeoutId = setTimeout(delayed, wait);\n\t }\n\t if (leadingCall) {\n\t isCalled = true;\n\t result = func.apply(thisArg, args);\n\t }\n\t if (isCalled && !timeoutId && !maxTimeoutId) {\n\t args = thisArg = null;\n\t }\n\t return result;\n\t }\n\t debounced.cancel = cancel;\n\t return debounced;\n\t }\n\n\t /**\n\t * Defers invoking the `func` until the current call stack has cleared. Any\n\t * additional arguments are provided to `func` when it is invoked.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to defer.\n\t * @param {...*} [args] The arguments to invoke the function with.\n\t * @returns {number} Returns the timer id.\n\t * @example\n\t *\n\t * _.defer(function(text) { console.log(text); }, 'deferred');\n\t * // logs 'deferred' after one or more milliseconds\n\t */\n\t function defer(func) {\n\t return baseDelay(func, 1, arguments, 1);\n\t }\n\n\t /**\n\t * Invokes `func` after `wait` milliseconds. Any additional arguments are\n\t * provided to `func` when it is invoked.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to delay.\n\t * @param {number} wait The number of milliseconds to delay invocation.\n\t * @param {...*} [args] The arguments to invoke the function with.\n\t * @returns {number} Returns the timer id.\n\t * @example\n\t *\n\t * _.delay(function(text) { console.log(text); }, 1000, 'later');\n\t * // => logs 'later' after one second\n\t */\n\t function delay(func, wait) {\n\t return baseDelay(func, wait, arguments, 2);\n\t }\n\n\t /**\n\t * Creates a function that returns the result of invoking the provided\n\t * functions with the `this` binding of the created function, where each\n\t * successive invocation is supplied the return value of the previous.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {...Function} [funcs] Functions to invoke.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * function add(x, y) {\n\t * return x + y;\n\t * }\n\t *\n\t * function square(n) {\n\t * return n * n;\n\t * }\n\t *\n\t * var addSquare = _.flow(add, square);\n\t * addSquare(1, 2);\n\t * // => 9\n\t */\n\t function flow() {\n\t var funcs = arguments,\n\t length = funcs.length;\n\n\t if (!length) {\n\t return function() {};\n\t }\n\t if (!arrayEvery(funcs, isFunction)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t return function() {\n\t var index = 0,\n\t result = funcs[index].apply(this, arguments);\n\n\t while (++index < length) {\n\t result = funcs[index].call(this, result);\n\t }\n\t return result;\n\t };\n\t }\n\n\t /**\n\t * This method is like `_.flow` except that it creates a function that\n\t * invokes the provided functions from right to left.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias backflow, compose\n\t * @category Function\n\t * @param {...Function} [funcs] Functions to invoke.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * function add(x, y) {\n\t * return x + y;\n\t * }\n\t *\n\t * function square(n) {\n\t * return n * n;\n\t * }\n\t *\n\t * var addSquare = _.flowRight(square, add);\n\t * addSquare(1, 2);\n\t * // => 9\n\t */\n\t function flowRight() {\n\t var funcs = arguments,\n\t fromIndex = funcs.length - 1;\n\n\t if (fromIndex < 0) {\n\t return function() {};\n\t }\n\t if (!arrayEvery(funcs, isFunction)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t return function() {\n\t var index = fromIndex,\n\t result = funcs[index].apply(this, arguments);\n\n\t while (index--) {\n\t result = funcs[index].call(this, result);\n\t }\n\t return result;\n\t };\n\t }\n\n\t /**\n\t * Creates a function that memoizes the result of `func`. If `resolver` is\n\t * provided it determines the cache key for storing the result based on the\n\t * arguments provided to the memoized function. By default, the first argument\n\t * provided to the memoized function is coerced to a string and used as the\n\t * cache key. The `func` is invoked with the `this` binding of the memoized\n\t * function.\n\t *\n\t * **Note:** The cache is exposed as the `cache` property on the memoized\n\t * function. Its creation may be customized by replacing the `_.memoize.Cache`\n\t * constructor with one whose instances implement the ES `Map` method interface\n\t * of `get`, `has`, and `set`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to have its output memoized.\n\t * @param {Function} [resolver] The function to resolve the cache key.\n\t * @returns {Function} Returns the new memoizing function.\n\t * @example\n\t *\n\t * var upperCase = _.memoize(function(string) {\n\t * return string.toUpperCase();\n\t * });\n\t *\n\t * upperCase('fred');\n\t * // => 'FRED'\n\t *\n\t * // modifying the result cache\n\t * upperCase.cache.set('fred', 'BARNEY');\n\t * upperCase('fred');\n\t * // => 'BARNEY'\n\t *\n\t * // replacing `_.memoize.Cache`\n\t * var object = { 'user': 'fred' };\n\t * var other = { 'user': 'barney' };\n\t * var identity = _.memoize(_.identity);\n\t *\n\t * identity(object);\n\t * // => { 'user': 'fred' }\n\t * identity(other);\n\t * // => { 'user': 'fred' }\n\t *\n\t * _.memoize.Cache = WeakMap;\n\t * var identity = _.memoize(_.identity);\n\t *\n\t * identity(object);\n\t * // => { 'user': 'fred' }\n\t * identity(other);\n\t * // => { 'user': 'barney' }\n\t */\n\t function memoize(func, resolver) {\n\t if (!isFunction(func) || (resolver && !isFunction(resolver))) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t var memoized = function() {\n\t var cache = memoized.cache,\n\t key = resolver ? resolver.apply(this, arguments) : arguments[0];\n\n\t if (cache.has(key)) {\n\t return cache.get(key);\n\t }\n\t var result = func.apply(this, arguments);\n\t cache.set(key, result);\n\t return result;\n\t };\n\t memoized.cache = new memoize.Cache;\n\t return memoized;\n\t }\n\n\t /**\n\t * Creates a function that negates the result of the predicate `func`. The\n\t * `func` predicate is invoked with the `this` binding and arguments of the\n\t * created function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} predicate The predicate to negate.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * function isEven(n) {\n\t * return n % 2 == 0;\n\t * }\n\t *\n\t * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n\t * // => [1, 3, 5]\n\t */\n\t function negate(predicate) {\n\t if (!isFunction(predicate)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t return function() {\n\t return !predicate.apply(this, arguments);\n\t };\n\t }\n\n\t /**\n\t * Creates a function that is restricted to invoking `func` once. Repeat calls\n\t * to the function return the value of the first call. The `func` is invoked\n\t * with the `this` binding of the created function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @type Function\n\t * @category Function\n\t * @param {Function} func The function to restrict.\n\t * @returns {Function} Returns the new restricted function.\n\t * @example\n\t *\n\t * var initialize = _.once(createApplication);\n\t * initialize();\n\t * initialize();\n\t * // `initialize` invokes `createApplication` once\n\t */\n\t function once(func) {\n\t return before(func, 2);\n\t }\n\n\t /**\n\t * Creates a function that invokes `func` with `partial` arguments prepended\n\t * to those provided to the new function. This method is like `_.bind` except\n\t * it does **not** alter the `this` binding.\n\t *\n\t * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n\t * builds, may be used as a placeholder for partially applied arguments.\n\t *\n\t * **Note:** This method does not set the `length` property of partially\n\t * applied functions.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to partially apply arguments to.\n\t * @param {...*} [args] The arguments to be partially applied.\n\t * @returns {Function} Returns the new partially applied function.\n\t * @example\n\t *\n\t * var greet = function(greeting, name) {\n\t * return greeting + ' ' + name;\n\t * };\n\t *\n\t * var sayHelloTo = _.partial(greet, 'hello');\n\t * sayHelloTo('fred');\n\t * // => 'hello fred'\n\t *\n\t * // using placeholders\n\t * var greetFred = _.partial(greet, _, 'fred');\n\t * greetFred('hi');\n\t * // => 'hi fred'\n\t */\n\t function partial(func) {\n\t var partials = baseSlice(arguments, 1),\n\t holders = replaceHolders(partials, partial.placeholder);\n\n\t return createWrapper(func, PARTIAL_FLAG, null, partials, holders);\n\t }\n\n\t /**\n\t * This method is like `_.partial` except that partially applied arguments\n\t * are appended to those provided to the new function.\n\t *\n\t * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n\t * builds, may be used as a placeholder for partially applied arguments.\n\t *\n\t * **Note:** This method does not set the `length` property of partially\n\t * applied functions.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to partially apply arguments to.\n\t * @param {...*} [args] The arguments to be partially applied.\n\t * @returns {Function} Returns the new partially applied function.\n\t * @example\n\t *\n\t * var greet = function(greeting, name) {\n\t * return greeting + ' ' + name;\n\t * };\n\t *\n\t * var greetFred = _.partialRight(greet, 'fred');\n\t * greetFred('hi');\n\t * // => 'hi fred'\n\t *\n\t * // using placeholders\n\t * var sayHelloTo = _.partialRight(greet, 'hello', _);\n\t * sayHelloTo('fred');\n\t * // => 'hello fred'\n\t */\n\t function partialRight(func) {\n\t var partials = baseSlice(arguments, 1),\n\t holders = replaceHolders(partials, partialRight.placeholder);\n\n\t return createWrapper(func, PARTIAL_RIGHT_FLAG, null, partials, holders);\n\t }\n\n\t /**\n\t * Creates a function that invokes `func` with arguments arranged according\n\t * to the specified indexes where the argument value at the first index is\n\t * provided as the first argument, the argument value at the second index is\n\t * provided as the second argument, and so on.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to rearrange arguments for.\n\t * @param {...(number|number[])} indexes The arranged argument indexes,\n\t * specified as individual indexes or arrays of indexes.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * var rearged = _.rearg(function(a, b, c) {\n\t * return [a, b, c];\n\t * }, 2, 0, 1);\n\t *\n\t * rearged('b', 'c', 'a')\n\t * // => ['a', 'b', 'c']\n\t *\n\t * var map = _.rearg(_.map, [1, 0]);\n\t * map(function(n) { return n * 3; }, [1, 2, 3]);\n\t * // => [3, 6, 9]\n\t */\n\t function rearg(func) {\n\t var indexes = baseFlatten(arguments, false, false, 1);\n\t return createWrapper(func, REARG_FLAG, null, null, null, indexes);\n\t }\n\n\t /**\n\t * Creates a function that only invokes `func` at most once per every `wait`\n\t * milliseconds. The created function comes with a `cancel` method to cancel\n\t * delayed invocations. Provide an options object to indicate that `func`\n\t * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n\t * Subsequent calls to the throttled function return the result of the last\n\t * `func` call.\n\t *\n\t * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n\t * on the trailing edge of the timeout only if the the throttled function is\n\t * invoked more than once during the `wait` timeout.\n\t *\n\t * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n\t * for details over the differences between `_.throttle` and `_.debounce`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to throttle.\n\t * @param {number} wait The number of milliseconds to throttle invocations to.\n\t * @param {Object} [options] The options object.\n\t * @param {boolean} [options.leading=true] Specify invoking on the leading\n\t * edge of the timeout.\n\t * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n\t * edge of the timeout.\n\t * @returns {Function} Returns the new throttled function.\n\t * @example\n\t *\n\t * // avoid excessively updating the position while scrolling\n\t * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n\t *\n\t * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n\t * var throttled = _.throttle(renewToken, 300000, { 'trailing': false })\n\t * jQuery('.interactive').on('click', throttled);\n\t *\n\t * // cancel a trailing throttled call\n\t * jQuery(window).on('popstate', throttled.cancel);\n\t */\n\t function throttle(func, wait, options) {\n\t var leading = true,\n\t trailing = true;\n\n\t if (!isFunction(func)) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t if (options === false) {\n\t leading = false;\n\t } else if (isObject(options)) {\n\t leading = 'leading' in options ? !!options.leading : leading;\n\t trailing = 'trailing' in options ? !!options.trailing : trailing;\n\t }\n\t debounceOptions.leading = leading;\n\t debounceOptions.maxWait = +wait;\n\t debounceOptions.trailing = trailing;\n\t return debounce(func, wait, debounceOptions);\n\t }\n\n\t /**\n\t * Creates a function that provides `value` to the wrapper function as its\n\t * first argument. Any additional arguments provided to the function are\n\t * appended to those provided to the wrapper function. The wrapper is invoked\n\t * with the `this` binding of the created function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {*} value The value to wrap.\n\t * @param {Function} wrapper The wrapper function.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * var p = _.wrap(_.escape, function(func, text) {\n\t * return '

' + func(text) + '

';\n\t * });\n\t *\n\t * p('fred, barney, & pebbles');\n\t * // => '

fred, barney, & pebbles

'\n\t */\n\t function wrap(value, wrapper) {\n\t wrapper = wrapper == null ? identity : wrapper;\n\t return createWrapper(wrapper, PARTIAL_FLAG, null, [value], []);\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,\n\t * otherwise they are assigned by reference. If `customizer` is provided it is\n\t * invoked to produce the cloned values. If `customizer` returns `undefined`\n\t * cloning is handled by the method instead. The `customizer` is bound to\n\t * `thisArg` and invoked with two argument; (value [, index|key, object]).\n\t *\n\t * **Note:** This method is loosely based on the structured clone algorithm.\n\t * The enumerable properties of `arguments` objects and objects created by\n\t * constructors other than `Object` are cloned to plain `Object` objects. An\n\t * empty object is returned for uncloneable values such as functions, DOM nodes,\n\t * Maps, Sets, and WeakMaps. See the [HTML5 specification](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to clone.\n\t * @param {boolean} [isDeep] Specify a deep clone.\n\t * @param {Function} [customizer] The function to customize cloning values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {*} Returns the cloned value.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney' },\n\t * { 'user': 'fred' }\n\t * ];\n\t *\n\t * var shallow = _.clone(users);\n\t * shallow[0] === users[0];\n\t * // => true\n\t *\n\t * var deep = _.clone(users, true);\n\t * deep[0] === users[0];\n\t * // => false\n\t *\n\t * // using a customizer callback\n\t * var body = _.clone(document.body, function(value) {\n\t * return _.isElement(value) ? value.cloneNode(false) : undefined;\n\t * });\n\t *\n\t * body === document.body\n\t * // => false\n\t * body.nodeName\n\t * // => BODY\n\t * body.childNodes.length;\n\t * // => 0\n\t */\n\t function clone(value, isDeep, customizer, thisArg) {\n\t // Juggle arguments.\n\t if (typeof isDeep != 'boolean' && isDeep != null) {\n\t thisArg = customizer;\n\t customizer = isIterateeCall(value, isDeep, thisArg) ? null : isDeep;\n\t isDeep = false;\n\t }\n\t customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1);\n\t return baseClone(value, isDeep, customizer);\n\t }\n\n\t /**\n\t * Creates a deep clone of `value`. If `customizer` is provided it is invoked\n\t * to produce the cloned values. If `customizer` returns `undefined` cloning\n\t * is handled by the method instead. The `customizer` is bound to `thisArg`\n\t * and invoked with two argument; (value [, index|key, object]).\n\t *\n\t * **Note:** This method is loosely based on the structured clone algorithm.\n\t * The enumerable properties of `arguments` objects and objects created by\n\t * constructors other than `Object` are cloned to plain `Object` objects. An\n\t * empty object is returned for uncloneable values such as functions, DOM nodes,\n\t * Maps, Sets, and WeakMaps. See the [HTML5 specification](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to deep clone.\n\t * @param {Function} [customizer] The function to customize cloning values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {*} Returns the deep cloned value.\n\t * @example\n\t *\n\t * var users = [\n\t * { 'user': 'barney' },\n\t * { 'user': 'fred' }\n\t * ];\n\t *\n\t * var deep = _.cloneDeep(users);\n\t * deep[0] === users[0];\n\t * // => false\n\t *\n\t * // using a customizer callback\n\t * var el = _.cloneDeep(document.body, function(value) {\n\t * return _.isElement(value) ? value.cloneNode(true) : undefined;\n\t * });\n\t *\n\t * body === document.body\n\t * // => false\n\t * body.nodeName\n\t * // => BODY\n\t * body.childNodes.length;\n\t * // => 20\n\t */\n\t function cloneDeep(value, customizer, thisArg) {\n\t customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1);\n\t return baseClone(value, true, customizer);\n\t }\n\n\t /**\n\t * Checks if `value` is classified as an `arguments` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * (function() { return _.isArguments(arguments); })();\n\t * // => true\n\t *\n\t * _.isArguments([1, 2, 3]);\n\t * // => false\n\t */\n\t function isArguments(value) {\n\t var length = isObjectLike(value) ? value.length : undefined;\n\t return (isLength(length) && objToString.call(value) == argsTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * (function() { return _.isArray(arguments); })();\n\t * // => false\n\t */\n\t var isArray = nativeIsArray || function(value) {\n\t return (isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag) || false;\n\t };\n\n\t /**\n\t * Checks if `value` is classified as a boolean primitive or object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isBoolean(false);\n\t * // => true\n\t *\n\t * _.isBoolean(null);\n\t * // => false\n\t */\n\t function isBoolean(value) {\n\t return (value === true || value === false || isObjectLike(value) && objToString.call(value) == boolTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is classified as a `Date` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isDate(new Date);\n\t * // => true\n\t *\n\t * _.isDate('Mon April 23 2012');\n\t * // => false\n\t */\n\t function isDate(value) {\n\t return (isObjectLike(value) && objToString.call(value) == dateTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is a DOM element.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n\t * @example\n\t *\n\t * _.isElement(document.body);\n\t * // => true\n\t *\n\t * _.isElement('');\n\t * // => false\n\t */\n\t function isElement(value) {\n\t return (value && value.nodeType === 1 && isObjectLike(value) &&\n\t objToString.call(value).indexOf('Element') > -1) || false;\n\t }\n\t // Fallback for environments without DOM support.\n\t if (!support.dom) {\n\t isElement = function(value) {\n\t return (value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value)) || false;\n\t };\n\t }\n\n\t /**\n\t * Checks if a value is empty. A value is considered empty unless it is an\n\t * `arguments` object, array, string, or jQuery-like collection with a length\n\t * greater than `0` or an object with own enumerable properties.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {Array|Object|string} value The value to inspect.\n\t * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n\t * @example\n\t *\n\t * _.isEmpty(null);\n\t * // => true\n\t *\n\t * _.isEmpty(true);\n\t * // => true\n\t *\n\t * _.isEmpty(1);\n\t * // => true\n\t *\n\t * _.isEmpty([1, 2, 3]);\n\t * // => false\n\t *\n\t * _.isEmpty({ 'a': 1 });\n\t * // => false\n\t */\n\t function isEmpty(value) {\n\t if (value == null) {\n\t return true;\n\t }\n\t var length = value.length;\n\t if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||\n\t (isObjectLike(value) && isFunction(value.splice)))) {\n\t return !length;\n\t }\n\t return !keys(value).length;\n\t }\n\n\t /**\n\t * Performs a deep comparison between two values to determine if they are\n\t * equivalent. If `customizer` is provided it is invoked to compare values.\n\t * If `customizer` returns `undefined` comparisons are handled by the method\n\t * instead. The `customizer` is bound to `thisArg` and invoked with three\n\t * arguments; (value, other [, index|key]).\n\t *\n\t * **Note:** This method supports comparing arrays, booleans, `Date` objects,\n\t * numbers, `Object` objects, regexes, and strings. Functions and DOM nodes\n\t * are **not** supported. Provide a customizer function to extend support\n\t * for comparing other values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @param {Function} [customizer] The function to customize comparing values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred' };\n\t * var other = { 'user': 'fred' };\n\t *\n\t * object == other;\n\t * // => false\n\t *\n\t * _.isEqual(object, other);\n\t * // => true\n\t *\n\t * // using a customizer callback\n\t * var array = ['hello', 'goodbye'];\n\t * var other = ['hi', 'goodbye'];\n\t *\n\t * _.isEqual(array, other, function(value, other) {\n\t * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;\n\t * });\n\t * // => true\n\t */\n\t function isEqual(value, other, customizer, thisArg) {\n\t customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 3);\n\t if (!customizer && isStrictComparable(value) && isStrictComparable(other)) {\n\t return value === other;\n\t }\n\t var result = customizer ? customizer(value, other) : undefined;\n\t return typeof result == 'undefined' ? baseIsEqual(value, other, customizer) : !!result;\n\t }\n\n\t /**\n\t * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n\t * `SyntaxError`, `TypeError`, or `URIError` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n\t * @example\n\t *\n\t * _.isError(new Error);\n\t * // => true\n\t *\n\t * _.isError(Error);\n\t * // => false\n\t */\n\t function isError(value) {\n\t return (isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is a finite primitive number.\n\t *\n\t * **Note:** This method is based on ES `Number.isFinite`. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n\t * @example\n\t *\n\t * _.isFinite(10);\n\t * // => true\n\t *\n\t * _.isFinite('10');\n\t * // => false\n\t *\n\t * _.isFinite(true);\n\t * // => false\n\t *\n\t * _.isFinite(Object(10));\n\t * // => false\n\t *\n\t * _.isFinite(Infinity);\n\t * // => false\n\t */\n\t var isFinite = nativeNumIsFinite || function(value) {\n\t return typeof value == 'number' && nativeIsFinite(value);\n\t };\n\n\t /**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\t function isFunction(value) {\n\t // Avoid a Chakra JIT bug in compatibility modes of IE 11.\n\t // See https://github.com/jashkenas/underscore/issues/1621 for more details.\n\t return typeof value == 'function' || false;\n\t }\n\t // Fallback for environments that return incorrect `typeof` operator results.\n\t if (isFunction(/x/) || (Uint8Array && !isFunction(Uint8Array))) {\n\t isFunction = function(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in older versions of Chrome and Safari which return 'function' for regexes\n\t // and Safari 8 equivalents which return 'object' for typed array constructors.\n\t return objToString.call(value) == funcTag;\n\t };\n\t }\n\n\t /**\n\t * Checks if `value` is the language type of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * **Note:** See the [ES5 spec](https://es5.github.io/#x8) for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\t function isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return type == 'function' || (value && type == 'object') || false;\n\t }\n\n\t /**\n\t * Performs a deep comparison between `object` and `source` to determine if\n\t * `object` contains equivalent property values. If `customizer` is provided\n\t * it is invoked to compare values. If `customizer` returns `undefined`\n\t * comparisons are handled by the method instead. The `customizer` is bound\n\t * to `thisArg` and invoked with three arguments; (value, other, index|key).\n\t *\n\t * **Note:** This method supports comparing properties of arrays, booleans,\n\t * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions\n\t * and DOM nodes are **not** supported. Provide a customizer function to extend\n\t * support for comparing other values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {Object} source The object to inspect.\n\t * @param {Object} source The object of property values to match.\n\t * @param {Function} [customizer] The function to customize comparing values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred', 'age': 40 };\n\t *\n\t * _.isMatch(object, { 'age': 40 });\n\t * // => true\n\t *\n\t * _.isMatch(object, { 'age': 36 });\n\t * // => false\n\t *\n\t * // using a customizer callback\n\t * var object = { 'greeting': 'hello' };\n\t * var source = { 'greeting': 'hi' };\n\t *\n\t * _.isMatch(object, source, function(value, other) {\n\t * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;\n\t * });\n\t * // => true\n\t */\n\t function isMatch(object, source, customizer, thisArg) {\n\t var props = keys(source),\n\t length = props.length;\n\n\t customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 3);\n\t if (!customizer && length == 1) {\n\t var key = props[0],\n\t value = source[key];\n\n\t if (isStrictComparable(value)) {\n\t return object != null && value === object[key] && hasOwnProperty.call(object, key);\n\t }\n\t }\n\t var values = Array(length),\n\t strictCompareFlags = Array(length);\n\n\t while (length--) {\n\t value = values[length] = source[props[length]];\n\t strictCompareFlags[length] = isStrictComparable(value);\n\t }\n\t return baseIsMatch(object, props, values, strictCompareFlags, customizer);\n\t }\n\n\t /**\n\t * Checks if `value` is `NaN`.\n\t *\n\t * **Note:** This method is not the same as native `isNaN` which returns `true`\n\t * for `undefined` and other non-numeric values. See the [ES5 spec](https://es5.github.io/#x15.1.2.4)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n\t * @example\n\t *\n\t * _.isNaN(NaN);\n\t * // => true\n\t *\n\t * _.isNaN(new Number(NaN));\n\t * // => true\n\t *\n\t * isNaN(undefined);\n\t * // => true\n\t *\n\t * _.isNaN(undefined);\n\t * // => false\n\t */\n\t function isNaN(value) {\n\t // An `NaN` primitive is the only value that is not equal to itself.\n\t // Perform the `toStringTag` check first to avoid errors with some host objects in IE.\n\t return isNumber(value) && value != +value;\n\t }\n\n\t /**\n\t * Checks if `value` is a native function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n\t * @example\n\t *\n\t * _.isNative(Array.prototype.push);\n\t * // => true\n\t *\n\t * _.isNative(_);\n\t * // => false\n\t */\n\t function isNative(value) {\n\t if (value == null) {\n\t return false;\n\t }\n\t if (objToString.call(value) == funcTag) {\n\t return reNative.test(fnToString.call(value));\n\t }\n\t return (isObjectLike(value) && reHostCtor.test(value)) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is `null`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n\t * @example\n\t *\n\t * _.isNull(null);\n\t * // => true\n\t *\n\t * _.isNull(void 0);\n\t * // => false\n\t */\n\t function isNull(value) {\n\t return value === null;\n\t }\n\n\t /**\n\t * Checks if `value` is classified as a `Number` primitive or object.\n\t *\n\t * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n\t * as numbers, use the `_.isFinite` method.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isNumber(8.4);\n\t * // => true\n\t *\n\t * _.isNumber(NaN);\n\t * // => true\n\t *\n\t * _.isNumber('8.4');\n\t * // => false\n\t */\n\t function isNumber(value) {\n\t return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is a plain object, that is, an object created by the\n\t * `Object` constructor or one with a `[[Prototype]]` of `null`.\n\t *\n\t * **Note:** This method assumes objects created by the `Object` constructor\n\t * have no inherited enumerable properties.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * }\n\t *\n\t * _.isPlainObject(new Foo);\n\t * // => false\n\t *\n\t * _.isPlainObject([1, 2, 3]);\n\t * // => false\n\t *\n\t * _.isPlainObject({ 'x': 0, 'y': 0 });\n\t * // => true\n\t *\n\t * _.isPlainObject(Object.create(null));\n\t * // => true\n\t */\n\t var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n\t if (!(value && objToString.call(value) == objectTag)) {\n\t return false;\n\t }\n\t var valueOf = value.valueOf,\n\t objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n\t return objProto\n\t ? (value == objProto || getPrototypeOf(value) == objProto)\n\t : shimIsPlainObject(value);\n\t };\n\n\t /**\n\t * Checks if `value` is classified as a `RegExp` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isRegExp(/abc/);\n\t * // => true\n\t *\n\t * _.isRegExp('/abc/');\n\t * // => false\n\t */\n\t function isRegExp(value) {\n\t return (isObjectLike(value) && objToString.call(value) == regexpTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is classified as a `String` primitive or object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isString('abc');\n\t * // => true\n\t *\n\t * _.isString(1);\n\t * // => false\n\t */\n\t function isString(value) {\n\t return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is classified as a typed array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isTypedArray(new Uint8Array);\n\t * // => true\n\t *\n\t * _.isTypedArray([]);\n\t * // => false\n\t */\n\t function isTypedArray(value) {\n\t return (isObjectLike(value) && isLength(value.length) && typedArrayTags[objToString.call(value)]) || false;\n\t }\n\n\t /**\n\t * Checks if `value` is `undefined`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n\t * @example\n\t *\n\t * _.isUndefined(void 0);\n\t * // => true\n\t *\n\t * _.isUndefined(null);\n\t * // => false\n\t */\n\t function isUndefined(value) {\n\t return typeof value == 'undefined';\n\t }\n\n\t /**\n\t * Converts `value` to an array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {Array} Returns the converted array.\n\t * @example\n\t *\n\t * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3);\n\t * // => [2, 3]\n\t */\n\t function toArray(value) {\n\t var length = value ? value.length : 0;\n\t if (!isLength(length)) {\n\t return values(value);\n\t }\n\t if (!length) {\n\t return [];\n\t }\n\t return arrayCopy(value);\n\t }\n\n\t /**\n\t * Converts `value` to a plain object flattening inherited enumerable\n\t * properties of `value` to own properties of the plain object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {Object} Returns the converted plain object.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.assign({ 'a': 1 }, new Foo);\n\t * // => { 'a': 1, 'b': 2 }\n\t *\n\t * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n\t * // => { 'a': 1, 'b': 2, 'c': 3 }\n\t */\n\t function toPlainObject(value) {\n\t return baseCopy(value, keysIn(value));\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Assigns own enumerable properties of source object(s) to the destination\n\t * object. Subsequent sources overwrite property assignments of previous sources.\n\t * If `customizer` is provided it is invoked to produce the assigned values.\n\t * The `customizer` is bound to `thisArg` and invoked with five arguments;\n\t * (objectValue, sourceValue, key, object, source).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias extend\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @param {Function} [customizer] The function to customize assigning values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n\t * // => { 'user': 'fred', 'age': 40 }\n\t *\n\t * // using a customizer callback\n\t * var defaults = _.partialRight(_.assign, function(value, other) {\n\t * return typeof value == 'undefined' ? other : value;\n\t * });\n\t *\n\t * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n\t * // => { 'user': 'barney', 'age': 36 }\n\t */\n\t var assign = createAssigner(baseAssign);\n\n\t /**\n\t * Creates an object that inherits from the given `prototype` object. If a\n\t * `properties` object is provided its own enumerable properties are assigned\n\t * to the created object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} prototype The object to inherit from.\n\t * @param {Object} [properties] The properties to assign to the object.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * function Shape() {\n\t * this.x = 0;\n\t * this.y = 0;\n\t * }\n\t *\n\t * function Circle() {\n\t * Shape.call(this);\n\t * }\n\t *\n\t * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });\n\t *\n\t * var circle = new Circle;\n\t * circle instanceof Circle;\n\t * // => true\n\t *\n\t * circle instanceof Shape;\n\t * // => true\n\t */\n\t function create(prototype, properties, guard) {\n\t var result = baseCreate(prototype);\n\t if (guard && isIterateeCall(prototype, properties, guard)) {\n\t properties = null;\n\t }\n\t return properties ? baseCopy(properties, result, keys(properties)) : result;\n\t }\n\n\t /**\n\t * Assigns own enumerable properties of source object(s) to the destination\n\t * object for all destination properties that resolve to `undefined`. Once a\n\t * property is set, additional defaults of the same property are ignored.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n\t * // => { 'user': 'barney', 'age': 36 }\n\t */\n\t function defaults(object) {\n\t if (object == null) {\n\t return object;\n\t }\n\t var args = arrayCopy(arguments);\n\t args.push(assignDefaults);\n\t return assign.apply(undefined, args);\n\t }\n\n\t /**\n\t * This method is like `_.findIndex` except that it returns the key of the\n\t * first element `predicate` returns truthy for, instead of the element itself.\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to search.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\n\t * @example\n\t *\n\t * var users = {\n\t * 'barney': { 'age': 36, 'active': true },\n\t * 'fred': { 'age': 40, 'active': false },\n\t * 'pebbles': { 'age': 1, 'active': true }\n\t * };\n\t *\n\t * _.findKey(users, function(chr) { return chr.age < 40; });\n\t * // => 'barney' (iteration order is not guaranteed)\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.findKey(users, { 'age': 1 });\n\t * // => 'pebbles'\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.findKey(users, 'active');\n\t * // => 'barney'\n\t */\n\t function findKey(object, predicate, thisArg) {\n\t predicate = getCallback(predicate, thisArg, 3);\n\t return baseFind(object, predicate, baseForOwn, true);\n\t }\n\n\t /**\n\t * This method is like `_.findKey` except that it iterates over elements of\n\t * a collection in the opposite order.\n\t *\n\t * If a property name is provided for `predicate` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `predicate` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to search.\n\t * @param {Function|Object|string} [predicate=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\n\t * @example\n\t *\n\t * var users = {\n\t * 'barney': { 'age': 36, 'active': true },\n\t * 'fred': { 'age': 40, 'active': false },\n\t * 'pebbles': { 'age': 1, 'active': true }\n\t * };\n\t *\n\t * _.findLastKey(users, function(chr) { return chr.age < 40; });\n\t * // => returns `pebbles` assuming `_.findKey` returns `barney`\n\t *\n\t * // using the \"_.matches\" callback shorthand\n\t * _.findLastKey(users, { 'age': 36 });\n\t * // => 'barney'\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.findLastKey(users, 'active');\n\t * // => 'pebbles'\n\t */\n\t function findLastKey(object, predicate, thisArg) {\n\t predicate = getCallback(predicate, thisArg, 3);\n\t return baseFind(object, predicate, baseForOwnRight, true);\n\t }\n\n\t /**\n\t * Iterates over own and inherited enumerable properties of an object invoking\n\t * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked\n\t * with three arguments; (value, key, object). Iterator functions may exit\n\t * iteration early by explicitly returning `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.forIn(new Foo, function(value, key) {\n\t * console.log(key);\n\t * });\n\t * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)\n\t */\n\t function forIn(object, iteratee, thisArg) {\n\t if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {\n\t iteratee = bindCallback(iteratee, thisArg, 3);\n\t }\n\t return baseFor(object, iteratee, keysIn);\n\t }\n\n\t /**\n\t * This method is like `_.forIn` except that it iterates over properties of\n\t * `object` in the opposite order.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.forInRight(new Foo, function(value, key) {\n\t * console.log(key);\n\t * });\n\t * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'\n\t */\n\t function forInRight(object, iteratee, thisArg) {\n\t iteratee = bindCallback(iteratee, thisArg, 3);\n\t return baseForRight(object, iteratee, keysIn);\n\t }\n\n\t /**\n\t * Iterates over own enumerable properties of an object invoking `iteratee`\n\t * for each property. The `iteratee` is bound to `thisArg` and invoked with\n\t * three arguments; (value, key, object). Iterator functions may exit iteration\n\t * early by explicitly returning `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(n, key) {\n\t * console.log(key);\n\t * });\n\t * // => logs '0', '1', and 'length' (iteration order is not guaranteed)\n\t */\n\t function forOwn(object, iteratee, thisArg) {\n\t if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {\n\t iteratee = bindCallback(iteratee, thisArg, 3);\n\t }\n\t return baseForOwn(object, iteratee);\n\t }\n\n\t /**\n\t * This method is like `_.forOwn` except that it iterates over properties of\n\t * `object` in the opposite order.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(n, key) {\n\t * console.log(key);\n\t * });\n\t * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'\n\t */\n\t function forOwnRight(object, iteratee, thisArg) {\n\t iteratee = bindCallback(iteratee, thisArg, 3);\n\t return baseForRight(object, iteratee, keys);\n\t }\n\n\t /**\n\t * Creates an array of function property names from all enumerable properties,\n\t * own and inherited, of `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias methods\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the new array of property names.\n\t * @example\n\t *\n\t * _.functions(_);\n\t * // => ['all', 'any', 'bind', ...]\n\t */\n\t function functions(object) {\n\t return baseFunctions(object, keysIn(object));\n\t }\n\n\t /**\n\t * Checks if `key` exists as a direct property of `object` instead of an\n\t * inherited property.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @param {string} key The key to check.\n\t * @returns {boolean} Returns `true` if `key` is a direct property, else `false`.\n\t * @example\n\t *\n\t * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');\n\t * // => true\n\t */\n\t function has(object, key) {\n\t return object ? hasOwnProperty.call(object, key) : false;\n\t }\n\n\t /**\n\t * Creates an object composed of the inverted keys and values of `object`.\n\t * If `object` contains duplicate values, subsequent values overwrite property\n\t * assignments of previous values unless `multiValue` is `true`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to invert.\n\t * @param {boolean} [multiValue] Allow multiple values per key.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {Object} Returns the new inverted object.\n\t * @example\n\t *\n\t * _.invert({ 'first': 'fred', 'second': 'barney' });\n\t * // => { 'fred': 'first', 'barney': 'second' }\n\t *\n\t * // without `multiValue`\n\t * _.invert({ 'first': 'fred', 'second': 'barney', 'third': 'fred' });\n\t * // => { 'fred': 'third', 'barney': 'second' }\n\t *\n\t * // with `multiValue`\n\t * _.invert({ 'first': 'fred', 'second': 'barney', 'third': 'fred' }, true);\n\t * // => { 'fred': ['first', 'third'], 'barney': ['second'] }\n\t */\n\t function invert(object, multiValue, guard) {\n\t if (guard && isIterateeCall(object, multiValue, guard)) {\n\t multiValue = null;\n\t }\n\t var index = -1,\n\t props = keys(object),\n\t length = props.length,\n\t result = {};\n\n\t while (++index < length) {\n\t var key = props[index],\n\t value = object[key];\n\n\t if (multiValue) {\n\t if (hasOwnProperty.call(result, value)) {\n\t result[value].push(key);\n\t } else {\n\t result[value] = [key];\n\t }\n\t }\n\t else {\n\t result[value] = key;\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates an array of the own enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects. See the\n\t * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.keys)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keys(new Foo);\n\t * // => ['a', 'b'] (iteration order is not guaranteed)\n\t *\n\t * _.keys('hi');\n\t * // => ['0', '1']\n\t */\n\t var keys = !nativeKeys ? shimKeys : function(object) {\n\t if (object) {\n\t var Ctor = object.constructor,\n\t length = object.length;\n\t }\n\t if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n\t (typeof object != 'function' && (length && isLength(length)))) {\n\t return shimKeys(object);\n\t }\n\t return isObject(object) ? nativeKeys(object) : [];\n\t };\n\n\t /**\n\t * Creates an array of the own and inherited enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keysIn(new Foo);\n\t * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n\t */\n\t function keysIn(object) {\n\t if (object == null) {\n\t return [];\n\t }\n\t if (!isObject(object)) {\n\t object = Object(object);\n\t }\n\t var length = object.length;\n\t length = (length && isLength(length) &&\n\t (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n\t var Ctor = object.constructor,\n\t index = -1,\n\t isProto = typeof Ctor == 'function' && Ctor.prototype == object,\n\t result = Array(length),\n\t skipIndexes = length > 0;\n\n\t while (++index < length) {\n\t result[index] = (index + '');\n\t }\n\t for (var key in object) {\n\t if (!(skipIndexes && isIndex(key, length)) &&\n\t !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates an object with the same keys as `object` and values generated by\n\t * running each own enumerable property of `object` through `iteratee`. The\n\t * iteratee function is bound to `thisArg` and invoked with three arguments;\n\t * (value, key, object).\n\t *\n\t * If a property name is provided for `iteratee` the created \"_.property\"\n\t * style callback returns the property value of the given element.\n\t *\n\t * If an object is provided for `iteratee` the created \"_.matches\" style\n\t * callback returns `true` for elements that have the properties of the given\n\t * object, else `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n\t * per iteration. If a property name or object is provided it is used to\n\t * create a \"_.property\" or \"_.matches\" style callback respectively.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {Object} Returns the new mapped object.\n\t * @example\n\t *\n\t * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(n) { return n * 3; });\n\t * // => { 'a': 3, 'b': 6, 'c': 9 }\n\t *\n\t * var users = {\n\t * 'fred': { 'user': 'fred', 'age': 40 },\n\t * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n\t * };\n\t *\n\t * // using the \"_.property\" callback shorthand\n\t * _.mapValues(users, 'age');\n\t * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n\t */\n\t function mapValues(object, iteratee, thisArg) {\n\t var result = {};\n\t iteratee = getCallback(iteratee, thisArg, 3);\n\n\t baseForOwn(object, function(value, key, object) {\n\t result[key] = iteratee(value, key, object);\n\t });\n\t return result;\n\t }\n\n\t /**\n\t * Recursively merges own enumerable properties of the source object(s), that\n\t * don't resolve to `undefined` into the destination object. Subsequent sources\n\t * overwrite property assignments of previous sources. If `customizer` is\n\t * provided it is invoked to produce the merged values of the destination and\n\t * source properties. If `customizer` returns `undefined` merging is handled\n\t * by the method instead. The `customizer` is bound to `thisArg` and invoked\n\t * with five arguments; (objectValue, sourceValue, key, object, source).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @param {Function} [customizer] The function to customize merging properties.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var users = {\n\t * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n\t * };\n\t *\n\t * var ages = {\n\t * 'data': [{ 'age': 36 }, { 'age': 40 }]\n\t * };\n\t *\n\t * _.merge(users, ages);\n\t * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n\t *\n\t * // using a customizer callback\n\t * var object = {\n\t * 'fruits': ['apple'],\n\t * 'vegetables': ['beet']\n\t * };\n\t *\n\t * var other = {\n\t * 'fruits': ['banana'],\n\t * 'vegetables': ['carrot']\n\t * };\n\t *\n\t * _.merge(object, other, function(a, b) {\n\t * return _.isArray(a) ? a.concat(b) : undefined;\n\t * });\n\t * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n\t */\n\t var merge = createAssigner(baseMerge);\n\n\t /**\n\t * The opposite of `_.pick`; this method creates an object composed of the\n\t * own and inherited enumerable properties of `object` that are not omitted.\n\t * Property names may be specified as individual arguments or as arrays of\n\t * property names. If `predicate` is provided it is invoked for each property\n\t * of `object` omitting the properties `predicate` returns truthy for. The\n\t * predicate is bound to `thisArg` and invoked with three arguments;\n\t * (value, key, object).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The source object.\n\t * @param {Function|...(string|string[])} [predicate] The function invoked per\n\t * iteration or property names to omit, specified as individual property\n\t * names or arrays of property names.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred', 'age': 40 };\n\t *\n\t * _.omit(object, 'age');\n\t * // => { 'user': 'fred' }\n\t *\n\t * _.omit(object, _.isNumber);\n\t * // => { 'user': 'fred' }\n\t */\n\t function omit(object, predicate, thisArg) {\n\t if (object == null) {\n\t return {};\n\t }\n\t if (typeof predicate != 'function') {\n\t var props = arrayMap(baseFlatten(arguments, false, false, 1), String);\n\t return pickByArray(object, baseDifference(keysIn(object), props));\n\t }\n\t predicate = bindCallback(predicate, thisArg, 3);\n\t return pickByCallback(object, function(value, key, object) {\n\t return !predicate(value, key, object);\n\t });\n\t }\n\n\t /**\n\t * Creates a two dimensional array of the key-value pairs for `object`,\n\t * e.g. `[[key1, value1], [key2, value2]]`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the new array of key-value pairs.\n\t * @example\n\t *\n\t * _.pairs({ 'barney': 36, 'fred': 40 });\n\t * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)\n\t */\n\t function pairs(object) {\n\t var index = -1,\n\t props = keys(object),\n\t length = props.length,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t var key = props[index];\n\t result[index] = [key, object[key]];\n\t }\n\t return result;\n\t }\n\n\t /**\n\t * Creates an object composed of the picked `object` properties. Property\n\t * names may be specified as individual arguments or as arrays of property\n\t * names. If `predicate` is provided it is invoked for each property of `object`\n\t * picking the properties `predicate` returns truthy for. The predicate is\n\t * bound to `thisArg` and invoked with three arguments; (value, key, object).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The source object.\n\t * @param {Function|...(string|string[])} [predicate] The function invoked per\n\t * iteration or property names to pick, specified as individual property\n\t * names or arrays of property names.\n\t * @param {*} [thisArg] The `this` binding of `predicate`.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred', 'age': 40 };\n\t *\n\t * _.pick(object, 'user');\n\t * // => { 'user': 'fred' }\n\t *\n\t * _.pick(object, _.isString);\n\t * // => { 'user': 'fred' }\n\t */\n\t function pick(object, predicate, thisArg) {\n\t if (object == null) {\n\t return {};\n\t }\n\t return typeof predicate == 'function'\n\t ? pickByCallback(object, bindCallback(predicate, thisArg, 3))\n\t : pickByArray(object, baseFlatten(arguments, false, false, 1));\n\t }\n\n\t /**\n\t * Resolves the value of property `key` on `object`. If the value of `key` is\n\t * a function it is invoked with the `this` binding of `object` and its result\n\t * is returned, else the property value is returned. If the property value is\n\t * `undefined` the `defaultValue` is used in its place.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the property to resolve.\n\t * @param {*} [defaultValue] The value returned if the property value\n\t * resolves to `undefined`.\n\t * @returns {*} Returns the resolved value.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred', 'age': _.constant(40) };\n\t *\n\t * _.result(object, 'user');\n\t * // => 'fred'\n\t *\n\t * _.result(object, 'age');\n\t * // => 40\n\t *\n\t * _.result(object, 'status', 'busy');\n\t * // => 'busy'\n\t *\n\t * _.result(object, 'status', _.constant('busy'));\n\t * // => 'busy'\n\t */\n\t function result(object, key, defaultValue) {\n\t var value = object == null ? undefined : object[key];\n\t if (typeof value == 'undefined') {\n\t value = defaultValue;\n\t }\n\t return isFunction(value) ? value.call(object) : value;\n\t }\n\n\t /**\n\t * An alternative to `_.reduce`; this method transforms `object` to a new\n\t * `accumulator` object which is the result of running each of its own enumerable\n\t * properties through `iteratee`, with each invocation potentially mutating\n\t * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked\n\t * with four arguments; (accumulator, value, key, object). Iterator functions\n\t * may exit iteration early by explicitly returning `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Array|Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [accumulator] The custom accumulator value.\n\t * @param {*} [thisArg] The `this` binding of `iteratee`.\n\t * @returns {*} Returns the accumulated value.\n\t * @example\n\t *\n\t * var squares = _.transform([1, 2, 3, 4, 5, 6], function(result, n) {\n\t * n *= n;\n\t * if (n % 2) {\n\t * return result.push(n) < 3;\n\t * }\n\t * });\n\t * // => [1, 9, 25]\n\t *\n\t * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, n, key) {\n\t * result[key] = n * 3;\n\t * });\n\t * // => { 'a': 3, 'b': 6, 'c': 9 }\n\t */\n\t function transform(object, iteratee, accumulator, thisArg) {\n\t var isArr = isArray(object) || isTypedArray(object);\n\t iteratee = getCallback(iteratee, thisArg, 4);\n\n\t if (accumulator == null) {\n\t if (isArr || isObject(object)) {\n\t var Ctor = object.constructor;\n\t if (isArr) {\n\t accumulator = isArray(object) ? new Ctor : [];\n\t } else {\n\t accumulator = baseCreate(typeof Ctor == 'function' && Ctor.prototype);\n\t }\n\t } else {\n\t accumulator = {};\n\t }\n\t }\n\t (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\n\t return iteratee(accumulator, value, index, object);\n\t });\n\t return accumulator;\n\t }\n\n\t /**\n\t * Creates an array of the own enumerable property values of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property values.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.values(new Foo);\n\t * // => [1, 2] (iteration order is not guaranteed)\n\t *\n\t * _.values('hi');\n\t * // => ['h', 'i']\n\t */\n\t function values(object) {\n\t return baseValues(object, keys(object));\n\t }\n\n\t /**\n\t * Creates an array of the own and inherited enumerable property values\n\t * of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property values.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.valuesIn(new Foo);\n\t * // => [1, 2, 3] (iteration order is not guaranteed)\n\t */\n\t function valuesIn(object) {\n\t return baseValues(object, keysIn(object));\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Produces a random number between `min` and `max` (inclusive). If only one\n\t * argument is provided a number between `0` and the given number is returned.\n\t * If `floating` is `true`, or either `min` or `max` are floats, a floating-point\n\t * number is returned instead of an integer.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Number\n\t * @param {number} [min=0] The minimum possible value.\n\t * @param {number} [max=1] The maximum possible value.\n\t * @param {boolean} [floating] Specify returning a floating-point number.\n\t * @returns {number} Returns the random number.\n\t * @example\n\t *\n\t * _.random(0, 5);\n\t * // => an integer between 0 and 5\n\t *\n\t * _.random(5);\n\t * // => also an integer between 0 and 5\n\t *\n\t * _.random(5, true);\n\t * // => a floating-point number between 0 and 5\n\t *\n\t * _.random(1.2, 5.2);\n\t * // => a floating-point number between 1.2 and 5.2\n\t */\n\t function random(min, max, floating) {\n\t if (floating && isIterateeCall(min, max, floating)) {\n\t max = floating = null;\n\t }\n\t var noMin = min == null,\n\t noMax = max == null;\n\n\t if (floating == null) {\n\t if (noMax && typeof min == 'boolean') {\n\t floating = min;\n\t min = 1;\n\t }\n\t else if (typeof max == 'boolean') {\n\t floating = max;\n\t noMax = true;\n\t }\n\t }\n\t if (noMin && noMax) {\n\t max = 1;\n\t noMax = false;\n\t }\n\t min = +min || 0;\n\t if (noMax) {\n\t max = min;\n\t min = 0;\n\t } else {\n\t max = +max || 0;\n\t }\n\t if (floating || min % 1 || max % 1) {\n\t var rand = nativeRandom();\n\t return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\n\t }\n\t return baseRandom(min, max);\n\t }\n\n\t /*------------------------------------------------------------------------*/\n\n\t /**\n\t * Converts `string` to camel case.\n\t * See [Wikipedia](https://en.wikipedia.org/wiki/CamelCase) for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the camel cased string.\n\t * @example\n\t *\n\t * _.camelCase('Foo Bar');\n\t * // => 'fooBar'\n\t *\n\t * _.camelCase('--foo-bar');\n\t * // => 'fooBar'\n\t *\n\t * _.camelCase('__foo_bar__');\n\t * // => 'fooBar'\n\t */\n\t var camelCase = createCompounder(function(result, word, index) {\n\t word = word.toLowerCase();\n\t return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\n\t });\n\n\t /**\n\t * Capitalizes the first character of `string`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to capitalize.\n\t * @returns {string} Returns the capitalized string.\n\t * @example\n\t *\n\t * _.capitalize('fred');\n\t * // => 'Fred'\n\t */\n\t function capitalize(string) {\n\t string = baseToString(string);\n\t return string && (string.charAt(0).toUpperCase() + string.slice(1));\n\t }\n\n\t /**\n\t * Deburrs `string` by converting latin-1 supplementary letters to basic latin letters.\n\t * See [Wikipedia](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to deburr.\n\t * @returns {string} Returns the deburred string.\n\t * @example\n\t *\n\t * _.deburr('déjà vu');\n\t * // => 'deja vu'\n\t */\n\t function deburr(string) {\n\t string = baseToString(string);\n\t return string && string.replace(reLatin1, deburrLetter);\n\t }\n\n\t /**\n\t * Checks if `string` ends with the given target string.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to search.\n\t * @param {string} [target] The string to search for.\n\t * @param {number} [position=string.length] The position to search from.\n\t * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.\n\t * @example\n\t *\n\t * _.endsWith('abc', 'c');\n\t * // => true\n\t *\n\t * _.endsWith('abc', 'b');\n\t * // => false\n\t *\n\t * _.endsWith('abc', 'b', 2);\n\t * // => true\n\t */\n\t function endsWith(string, target, position) {\n\t string = baseToString(string);\n\t target = (target + '');\n\n\t var length = string.length;\n\t position = (typeof position == 'undefined' ? length : nativeMin(position < 0 ? 0 : (+position || 0), length)) - target.length;\n\t return position >= 0 && string.indexOf(target, position) == position;\n\t }\n\n\t /**\n\t * Converts the characters \"&\", \"<\", \">\", '\"', \"'\", and '`', in `string` to\n\t * their corresponding HTML entities.\n\t *\n\t * **Note:** No other characters are escaped. To escape additional characters\n\t * use a third-party library like [_he_](https://mths.be/he).\n\t *\n\t * Though the \">\" character is escaped for symmetry, characters like\n\t * \">\" and \"/\" don't require escaping in HTML and have no special meaning\n\t * unless they're part of a tag or unquoted attribute value.\n\t * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n\t * (under \"semi-related fun fact\") for more details.\n\t *\n\t * Backticks are escaped because in Internet Explorer < 9, they can break out\n\t * of attribute values or HTML comments. See [#102](https://html5sec.org/#102),\n\t * [#108](https://html5sec.org/#108), and [#133](https://html5sec.org/#133) of\n\t * the [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.\n\t *\n\t * When working with HTML you should always quote attribute values to reduce\n\t * XSS vectors. See [Ryan Grove's article](http://wonko.com/post/html-escaping)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to escape.\n\t * @returns {string} Returns the escaped string.\n\t * @example\n\t *\n\t * _.escape('fred, barney, & pebbles');\n\t * // => 'fred, barney, & pebbles'\n\t */\n\t function escape(string) {\n\t // Reset `lastIndex` because in IE < 9 `String#replace` does not.\n\t string = baseToString(string);\n\t return (string && reHasUnescapedHtml.test(string))\n\t ? string.replace(reUnescapedHtml, escapeHtmlChar)\n\t : string;\n\t }\n\n\t /**\n\t * Escapes the `RegExp` special characters \"\\\", \"^\", \"$\", \".\", \"|\", \"?\", \"*\",\n\t * \"+\", \"(\", \")\", \"[\", \"]\", \"{\" and \"}\" in `string`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to escape.\n\t * @returns {string} Returns the escaped string.\n\t * @example\n\t *\n\t * _.escapeRegExp('[lodash](https://lodash.com/)');\n\t * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n\t */\n\t function escapeRegExp(string) {\n\t string = baseToString(string);\n\t return (string && reHasRegExpChars.test(string))\n\t ? string.replace(reRegExpChars, '\\\\$&')\n\t : string;\n\t }\n\n\t /**\n\t * Converts `string` to kebab case (a.k.a. spinal case).\n\t * See [Wikipedia](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles) for\n\t * more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the kebab cased string.\n\t * @example\n\t *\n\t * _.kebabCase('Foo Bar');\n\t * // => 'foo-bar'\n\t *\n\t * _.kebabCase('fooBar');\n\t * // => 'foo-bar'\n\t *\n\t * _.kebabCase('__foo_bar__');\n\t * // => 'foo-bar'\n\t */\n\t var kebabCase = createCompounder(function(result, word, index) {\n\t return result + (index ? '-' : '') + word.toLowerCase();\n\t });\n\n\t /**\n\t * Pads `string` on the left and right sides if it is shorter then the given\n\t * padding length. The `chars` string may be truncated if the number of padding\n\t * characters can't be evenly divided by the padding length.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to pad.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the padded string.\n\t * @example\n\t *\n\t * _.pad('abc', 8);\n\t * // => ' abc '\n\t *\n\t * _.pad('abc', 8, '_-');\n\t * // => '_-abc_-_'\n\t *\n\t * _.pad('abc', 3);\n\t * // => 'abc'\n\t */\n\t function pad(string, length, chars) {\n\t string = baseToString(string);\n\t length = +length;\n\n\t var strLength = string.length;\n\t if (strLength >= length || !nativeIsFinite(length)) {\n\t return string;\n\t }\n\t var mid = (length - strLength) / 2,\n\t leftLength = floor(mid),\n\t rightLength = ceil(mid);\n\n\t chars = createPad('', rightLength, chars);\n\t return chars.slice(0, leftLength) + string + chars;\n\t }\n\n\t /**\n\t * Pads `string` on the left side if it is shorter then the given padding\n\t * length. The `chars` string may be truncated if the number of padding\n\t * characters exceeds the padding length.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to pad.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the padded string.\n\t * @example\n\t *\n\t * _.padLeft('abc', 6);\n\t * // => ' abc'\n\t *\n\t * _.padLeft('abc', 6, '_-');\n\t * // => '_-_abc'\n\t *\n\t * _.padLeft('abc', 3);\n\t * // => 'abc'\n\t */\n\t function padLeft(string, length, chars) {\n\t string = baseToString(string);\n\t return string && (createPad(string, length, chars) + string);\n\t }\n\n\t /**\n\t * Pads `string` on the right side if it is shorter then the given padding\n\t * length. The `chars` string may be truncated if the number of padding\n\t * characters exceeds the padding length.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to pad.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the padded string.\n\t * @example\n\t *\n\t * _.padRight('abc', 6);\n\t * // => 'abc '\n\t *\n\t * _.padRight('abc', 6, '_-');\n\t * // => 'abc_-_'\n\t *\n\t * _.padRight('abc', 3);\n\t * // => 'abc'\n\t */\n\t function padRight(string, length, chars) {\n\t string = baseToString(string);\n\t return string && (string + createPad(string, length, chars));\n\t }\n\n\t /**\n\t * Converts `string` to an integer of the specified radix. If `radix` is\n\t * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,\n\t * in which case a `radix` of `16` is used.\n\t *\n\t * **Note:** This method aligns with the ES5 implementation of `parseInt`.\n\t * See the [ES5 spec](https://es5.github.io/#E) for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} string The string to convert.\n\t * @param {number} [radix] The radix to interpret `value` by.\n\t * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n\t * @returns {number} Returns the converted integer.\n\t * @example\n\t *\n\t * _.parseInt('08');\n\t * // => 8\n\t *\n\t * _.map(['6', '08', '10'], _.parseInt);\n\t * // => [6, 8, 10]\n\t */\n\t function parseInt(string, radix, guard) {\n\t if (guard && isIterateeCall(string, radix, guard)) {\n\t radix = 0;\n\t }\n\t return nativeParseInt(string, radix);\n\t }\n\t // Fallback for environments with pre-ES5 implementations.\n\t if (nativeParseInt(whitespace + '08') != 8) {\n\t parseInt = function(string, radix, guard) {\n\t // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.\n\t // Chrome fails to trim leading whitespace characters.\n\t // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.\n\t if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\n\t radix = 0;\n\t } else if (radix) {\n\t radix = +radix;\n\t }\n\t string = trim(string);\n\t return nativeParseInt(string, radix || (reHexPrefix.test(string) ? 16 : 10));\n\t };\n\t }\n\n\t /**\n\t * Repeats the given string `n` times.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to repeat.\n\t * @param {number} [n=0] The number of times to repeat the string.\n\t * @returns {string} Returns the repeated string.\n\t * @example\n\t *\n\t * _.repeat('*', 3);\n\t * // => '***'\n\t *\n\t * _.repeat('abc', 2);\n\t * // => 'abcabc'\n\t *\n\t * _.repeat('abc', 0);\n\t * // => ''\n\t */\n\t function repeat(string, n) {\n\t var result = '';\n\t string = baseToString(string);\n\t n = +n;\n\t if (n < 1 || !string || !nativeIsFinite(n)) {\n\t return result;\n\t }\n\t // Leverage the exponentiation by squaring algorithm for a faster repeat.\n\t // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n\t do {\n\t if (n % 2) {\n\t result += string;\n\t }\n\t n = floor(n / 2);\n\t string += string;\n\t } while (n);\n\n\t return result;\n\t }\n\n\t /**\n\t * Converts `string` to snake case.\n\t * See [Wikipedia](https://en.wikipedia.org/wiki/Snake_case) for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the snake cased string.\n\t * @example\n\t *\n\t * _.snakeCase('Foo Bar');\n\t * // => 'foo_bar'\n\t *\n\t * _.snakeCase('fooBar');\n\t * // => 'foo_bar'\n\t *\n\t * _.snakeCase('--foo-bar');\n\t * // => 'foo_bar'\n\t */\n\t var snakeCase = createCompounder(function(result, word, index) {\n\t return result + (index ? '_' : '') + word.toLowerCase();\n\t });\n\n\t /**\n\t * Converts `string` to start case.\n\t * See [Wikipedia](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the start cased string.\n\t * @example\n\t *\n\t * _.startCase('--foo-bar');\n\t * // => 'Foo Bar'\n\t *\n\t * _.startCase('fooBar');\n\t * // => 'Foo Bar'\n\t *\n\t * _.startCase('__foo_bar__');\n\t * // => 'Foo Bar'\n\t */\n\t var startCase = createCompounder(function(result, word, index) {\n\t return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\n\t });\n\n\t /**\n\t * Checks if `string` starts with the given target string.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to search.\n\t * @param {string} [target] The string to search for.\n\t * @param {number} [position=0] The position to search from.\n\t * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.\n\t * @example\n\t *\n\t * _.startsWith('abc', 'a');\n\t * // => true\n\t *\n\t * _.startsWith('abc', 'b');\n\t * // => false\n\t *\n\t * _.startsWith('abc', 'b', 1);\n\t * // => true\n\t */\n\t function startsWith(string, target, position) {\n\t string = baseToString(string);\n\t position = position == null ? 0 : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\n\t return string.lastIndexOf(target, position) == position;\n\t }\n\n\t /**\n\t * Creates a compiled template function that can interpolate data properties\n\t * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n\t * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n\t * properties may be accessed as free variables in the template. If a setting\n\t * object is provided it takes precedence over `_.templateSettings` values.\n\t *\n\t * **Note:** In the development build `_.template` utilizes sourceURLs for easier debugging.\n\t * See the [HTML5 Rocks article on sourcemaps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n\t * for more details.\n\t *\n\t * For more information on precompiling templates see\n\t * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n\t *\n\t * For more information on Chrome extension sandboxes see\n\t * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The template string.\n\t * @param {Object} [options] The options object.\n\t * @param {RegExp} [options.escape] The HTML \"escape\" delimiter.\n\t * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n\t * @param {Object} [options.imports] An object to import into the template as free variables.\n\t * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n\t * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.\n\t * @param {string} [options.variable] The data object variable name.\n\t * @param- {Object} [otherOptions] Enables the legacy `options` param signature.\n\t * @returns {Function} Returns the compiled template function.\n\t * @example\n\t *\n\t * // using the \"interpolate\" delimiter to create a compiled template\n\t * var compiled = _.template('hello <%= user %>!');\n\t * compiled({ 'user': 'fred' });\n\t * // => 'hello fred!'\n\t *\n\t * // using the HTML \"escape\" delimiter to escape data property values\n\t * var compiled = _.template('<%- value %>');\n\t * compiled({ 'value': '